Dom4j 是 Java 操作 XML 的熱門庫,API 直觀、效能優異。本文示範如何使用 Dom4j 建立 XML 文件、寫入磁碟,並解析讀取所需資料。
<dependency>
<groupId>org.dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>2.1.4</version>
</dependency>
public void createXml(String fileName, String txtName) throws IOException {
Document document = DocumentHelper.createDocument();
Element root = document.addElement("root");
Element head = root.addElement("head");
head.addAttribute("type", "0");
head.addAttribute("code", "3003");
head.addElement("yhlb").setText("01");
head.addElement("username").setText("gsyh");
head.addElement("password").setText("zheshimima");
Element body = root.addElement("body");
body.addElement("data").addElement("dzwjm").setText(txtName);
// 格式化輸出
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter writer = new XMLWriter(new FileWriter(fileName), format);
writer.write(document);
writer.close();
}
產出範例:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<head type="0" code="3003">
<yhlb>01</yhlb>
<username>gsyh</username>
<password>zheshimima</password>
</head>
<body>
<data>
<dzwjm>test.txt</dzwjm>
</data>
</body>
</root>
public String parserXml(String fileName) throws DocumentException {
File inputXml = new File(fileName);
SAXReader saxReader = new SAXReader();
Document document = saxReader.read(inputXml);
Element root = document.getRootElement();
String findFileName = "";
for (Iterator<Element> i = root.elementIterator(); i.hasNext(); ) {
Element head = i.next();
for (Iterator<Element> j = head.elementIterator(); j.hasNext(); ) {
Element elem = j.next();
System.out.println(elem.getName() + ":" + elem.getText());
for (Iterator<Element> k = elem.elementIterator(); k.hasNext(); ) {
Element last = k.next();
System.out.println(last.getName() + ":" + last.getText());
findFileName = last.getText();
}
}
}
return findFileName;
}
Node node = document.selectSingleNode("//head/username");Namespace 與 XPath 結合。SAXReader 事件模式避免記憶體溢位。OutputFormat 設定 encoding 為 UTF-8,讀取時指定 SAXReader 的 encoding。<、>、& 等特殊字元。