dom4j入门使用

dom4j解析XML文件:

在解析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文件:

<?xml version="1.0" encoding="UTF-8"?>
<webapp>
	<bean id="user" class="club.208j.user">
		<properties name="asd">
			<property></property>
		</properties>
	</bean>
	<bean id="hello" class="club.208j.user">
		<properties id="111">
			<property></property>
		</properties>
	</bean>
</webapp>

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<Element> 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<Node> 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请自行查看。


注:以上文章仅是个人学习过程总结,若有不当之处,望不吝赐教。

猜你喜欢

转载自blog.csdn.net/m0_37265215/article/details/84399018