守着一只汪
原因:第五行的 <?xml version="1.0" encoding="utf-8"?> 多了这个xml声明解决方案:
1.如果是楼主创建xml的时候没有将这个删除了就好。
2.如果是获取出来的xml文本原本是这样的话:
将使用代码将多余的声明删除
提供如下解决方案:
package cn.lonecloud;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class XmlTest {
private static final String DELREG = "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
public static void main(String[] args) throws DocumentException {
SAXReader reader = new SAXReader();// 通过SAXReader从文件读取XML文档
File file = new File("D:/test.xml");
delMoreXml(file,DELREG);
Document document = reader.read(file);
Element root = document.getRootElement();
}
/**
* 删除多余的声明
* @param file xml文件
* @param reg 删除标识符
* @return
*/
public static File delMoreXml(File file,String reg) {
//获取文件名
String fileName = file.getAbsolutePath();
//判断是有多余的xml声明声明
boolean isReg = false;
File newFile = new File(fileName+".temp");
//删除所有多余的delReg
try (BufferedReader bf = new BufferedReader(new FileReader(file));
BufferedWriter bw = new BufferedWriter(new FileWriter(newFile));) {
String line = "";
while ((line = bf.readLine()) != null) {
if (line.contains(reg)) {
if (isReg) {
continue;
} else {
isReg=true;
}
}
bw.write(line);
}
} catch (IOException e) {
e.printStackTrace();
}
//删除源文件
file.delete();
//将新文件重新命名
newFile.renameTo(new File(fileName));
return newFile;
}
}