在解析XML文件之前导入dom4j-2.0.2.jar:使用如下代码:
// 解析XML文件,将XML文件转化为Document对象
public Document parseXML(File file) throws Exception {
SAXReader saxReader = new SAXReader();
Document document = saxReader.read(file);
return document;
}
上述代码即可将XML文件解析为Document对象。那么有了Document对象,我们就可以进行一系列操作:
(1)得到根元素,然后通过根元素返回一个包含元素为Element的迭代器,使用迭代器进行遍历。
test.xml文件:
dom4jTest1.java:
public class dom4jTest1 {
// 解析XML文件
public Document parseXML(File file) throws Exception {
SAXReader saxReader = new SAXReader();
Document document = saxReader.read(file);
return document;
}
}
dom4jTest1Test:
class dom4jTest1Test {
private dom4jTest1 dt;
@BeforeEach
void setUp() throws Exception {
dt = new dom4jTest1();
}
/*
* 演示遍历xml文件
*/
@Test
void test() throws Exception {
File file = new File("src/test.xml");
Document document = dt.parseXML(file);
Element root = document.getRootElement();
for (Iterator it = root.elementIterator(); it.hasNext();) {
Element element = it.next();
System.out.println(element);
}
}
}
(2)当然,除了遍历Document对象得到我们想要的数据,还有更强大的工具让我们使用XPath:
导入jaxen-1.1.2.jar包,添加到项目路径下:
class dom4jTest1Test {
private dom4jTest1 dt;
@BeforeEach
void setUp() throws Exception {
dt = new dom4jTest1();
}
/*
* 使用xpath进行复杂导航
*/
@Test
void test() throws Exception {
File file = new File("src/test.xml");
Document document = dt.parseXML(file);
List list = document.selectNodes("//webapp/bean");
System.out.println(list);
for (Node node : list) {
System.out.println(node.getName() + "\t" + node.getNodeTypeName()
+ "\t" + node.getPath() + "\t" + node.getUniquePath() + "\t"
+ node.valueOf("@id"));
}
}
}
具体的XPath,笔者也没有很系统的学习过,大家可以参考:XPath教程(ps:实际上笔者觉得,只要需要用的时候能想起这个很好用的工具即可。语言太多,学习能力才是能否成为好开发者的关键)
(3)将XML文件转化为字符串:
class dom4jTest1Test {
private dom4jTest1 dt;
@BeforeEach
void setUp() throws Exception {
dt = new dom4jTest1();
}
/*
* 将xml转化为String
*/
@Test
void test() throws Exception {
File file = new File("src/test.xml");
Document document = dt.parseXML(file);
// 将xml文件的内容转化为字符串
System.out.println(document.asXML());
}
}
(4)关于解析XML文件,查找指定元素,都了解过后,接下来就是创建XML文件:
// 创建文档
public Document createDocument() {
Document document = DocumentHelper.createDocument();
Element root = document.addElement("root");
Element author1 = root.addElement("author")
.addAttribute("name", "James").addAttribute("location", "UK")
.addText("James Strachan");
Element author2 = root.addElement("author").addAttribute("name", "Bob")
.addAttribute("location", "US").addText("Bob McWhirter");
return document;
}
创建完文档后就是将文档写到指定的文件中:
使用基本的IO流操作
FileWriter out = new FileWriter("foo.xml");
document.write(out);
out.close();
如果希望能够更改输出的格式,例如漂亮打印或紧凑格式,或者希望能够将Writer
对象或OutputStream
对象作为目标,那么可以使用XMLWriter
该类:
import org.dom4j.Document;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
public class Foo {
public void write(Document document) throws IOException {
// 未使用格式将document对象的内容输出到output.xml文件
try (FileWriter fileWiter = new FileWriter("output.xml")) {
XMLWriter writer = new XMLWriter(fileWriter);
writer.write( document );
writer.close();
}
// 使用了格式将document对象内容输出到控制台
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter writer = new XMLWriter(System.out, format);
writer.write(document);
// 使用了格式向output2.xml文件写入document
writer = new XMLWriter(new FileWriter("output2.xml"), format);
writer.write(document);
writer.close();
}
}
除上述的基本功能外,还有很多功能是等待实际需要时快速发掘的:Dom4j请自行查看。
注:以上文章仅是个人学习过程总结,若有不当之处,望不吝赐教。