四种方式操作XML文件
1,使用DOM,即Java原生API进行操作;
在Java DOM中,xml文件中的所有事物都是node,即所有事物都是node的子孙类,包括:document,node,attribute,text;
在操作XML文件前,通常先取得其根节点;
以下为用DOM API遍历XML文件的代码;
public class Test1 {
public static void main(String[] args) throws Exception {
File file = new File("E:" + File.separator + "test.xml");
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(file);
StringBuilder stringBuilder = new StringBuilder();
// 取得根节点
Element root = document.getDocumentElement();
System.out.println(ergodicXML((Node) root, stringBuilder));
}
// 递归遍历XML文件
public static StringBuilder ergodicXML(Node node, StringBuilder builder) {
NodeList list = node.getChildNodes();// 注意,得到的子节点里面有空格,因为DOM API认为XML文件中的标签之间的空格也会被认为是子节点。
if (list.getLength() == 0) {
return builder.append(node.getTextContent() + "\n");
} else {
for (int i = 0; i < list.getLength(); i++) {
ergodicXML(list.item(i), builder);
}
return builder;
}
}
}
2,用DOM4J操作XML文件
DOM4J可以解析XML文本和XML文件;
String XMLString = "<?xml version='1.0' encoding='UTF-8'?><name><>"; Document document2 = DocumentHelper.parseText(XMLString);
用DOM4J把XML文件遍历;
public class Test2 {
public static void main(String[] args) throws Exception{
File file = new File("E:"+ File.separator +"test.xml");
SAXReader reader = new SAXReader();
StringBuilder builder = new StringBuilder();
Document document = reader.read(file);
Element root = document.getRootElement();
System.out.println(ergodicXML(root, builder));
}
// 递归遍历XML文件,拼接builder,返回全部文本数据
public static StringBuilder ergodicXML(Element element , StringBuilder builder){
List<Element> list = element.elements();
if(list.size() == 0){
return builder.append(element.getText()+"\n");//每个标签的文本数据独占一行
}else {
Iterator<Element> iterator = element.elementIterator();
while (iterator.hasNext()){
Element element2 = iterator.next();
ergodicXML(element2, builder);
}
return builder;
}
}
}
3、用DOM生成XML对象,并写入到指定路径的文件
public class Test4 {
public static void main(String[] args) throws Exception {
// 创建XML对象
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.newDocument();
// 创基根节点
Element root = document.createElement("persons");
document.appendChild(root);
// 创建第一个节点
Element element1 = document.createElement("vv");
element1.setAttribute("ID", "01");
root.appendChild(element1);
// 创建第一个节点的子节点
Element element1_1 = document.createElement("age");
element1_1.setTextContent("22");
element1.appendChild(element1_1);
/*
* 把XML对象写入到指定路径的文件
*/
// DOM文档作为输出源
DOMSource source = new DOMSource(document);
// 文件作为输入源
File file = new File("test.xml");
BufferedWriter writer = new BufferedWriter(new PrintWriter(new OutputStreamWriter(new FileOutputStream(file))));
StreamResult result = new StreamResult(writer);
// 创建transfomer,进行设置,进行写入
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.transform(source, result);
//关闭输出流
writer.close();
}
}
浙公网安备 33010602011771号