Java dom4j生成与解析XML案例详解
什么是dom4j?
dom4j是一个开放源代码的Java XML解析器,它基于Java标准的DOM和XPath接口,并扩展了DOM和XPath库以实现更好的性能和易用性。dom4j能够读取XML文档、遍历XML元素树、编辑XML文档并生成新的XML文档。
dom4j生成XML
dom4j生成XML是指使用dom4j API创建XML文档,可以为文档添加元素、属性和文本节点等。下面是生成XML的步骤:
- 加载dom4j库和相关类
```java
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.XMLWriter;
//...
```
- 创建XML文档对象、根节点
java
Document document = DocumentHelper.createDocument();
Element root = document.addElement("root");
- 添加子节点和元素
java
Element child = root.addElement("child");
child.addAttribute("key", "value");
child.setText("Hello, world!");
- 输出XML文档
java
XMLWriter writer = new XMLWriter(new FileOutputStream(new File("output.xml")));
writer.write(document);
writer.close();
这段代码生成了一个XML文档,根节点为<root>
,包含一个名为<child>
的子节点,该子节点拥有一个名为key
的属性和一个文本值为Hello, world!
的文本节点。输出的XML文档保存在名为output.xml
的文件中。
dom4j解析XML
dom4j解析XML是指使用dom4j API读取XML文档,获取文档元素、属性和数据等。下面是解析XML的步骤:
- 加载dom4j库和相关类
```java
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
//...
```
- 创建SAXReader,加载XML文档
java
SAXReader reader = new SAXReader();
Document document = reader.read(new File("input.xml"));
- 获取文档根节点和子节点
java
Element root = document.getRootElement();
Element child = root.element("child");
- 获取节点属性和数据
java
String attributeValue = child.attributeValue("key");
String textValue = child.getText();
这段代码读取名为input.xml
的XML文档,获取根节点<root>
和子节点<child>
,并获取子节点的属性key
的值和文本值。注意这里的getText()
方法返回的是Doucment内部的文本数据,即除去子标签的所有内容。
示例1
下面是一个完整的例子,首先生成一个XML文档,然后使用SAXReader解析该文档,并输出解析结果。
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.XMLWriter;
import org.dom4j.io.SAXReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* 生成和解析XML文档的例子,包含一个子节点及其属性和数据。
*/
public class XmlExample {
public static void main(String[] args) {
try {
String fileName = "example.xml";
// 生成XML文档
Document document = DocumentHelper.createDocument();
Element root = document.addElement("root");
Element child = root.addElement("child");
child.addAttribute("key", "value");
child.setText("Hello, world!");
XMLWriter writer = new XMLWriter(new FileOutputStream(new File(fileName)));
writer.write(document);
writer.close();
// 解析XML文档
SAXReader reader = new SAXReader();
Document document2 = reader.read(new File(fileName));
Element root2 = document2.getRootElement();
Element child2 = root2.element("child");
String attributeValue = child2.attributeValue("key");
String textValue = child2.getText();
System.out.println("Attribute: " + attributeValue + ", Text: " + textValue);
} catch (IOException |DocumentException e) {
System.out.println("Error: " + e.getMessage());
}
}
}
执行该代码,可看到输出结果为:
Attribute: value, Text: Hello, world!
示例2
下面是另一个完整的例子,首先使用SAXReader解析一个XML文档,然后对文档进行遍历和修改,并生成一个新的XML文档。
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
/**
* 解析和修改XML文档的例子,包含一些元素和文本数据。
*/
public class XmlExample2 {
public static void main(String[] args) {
try {
String fileName = "example2.xml";
// 解析XML文档
SAXReader reader = new SAXReader();
Document document = reader.read(new File(fileName));
Element root = document.getRootElement();
// 遍历和修改XML文档
List<Element> elements = root.elements();
for (Element element : elements) {
if (element.getName().equals("child")) {
Element newElement = element.addElement("newNode");
newElement.addAttribute("key", "newvalue");
newElement.addText("newdata");
element.remove(element.element("subnode"));
}
}
// 保存修改后的XML文档
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter writer = new XMLWriter(new FileOutputStream(new File("output2.xml")), format);
writer.write(document);
writer.close();
} catch (IOException | DocumentException e) {
System.out.println("Error: " + e.getMessage());
}
}
}
这个例子从名为example2.xml
的XML文档中读取所有元素,遍历每个元素并做出操作,然后输出修改后的XML文件到名为output2.xml
的文件。做出的操作是:如果该元素名字为child
,向其添加一个名为newNode
的新元素、一个名为key
的属性和一个文本值为newdata
的文本节点,并移除名为subnode
的子节点。运行这个代码,可得到一个新的XML文档,其内容与源文档类似,但是经过了修改。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java dom4j生成与解析XML案例详解 - Python技术站