当前位置 博文首页 > Jqcode:使用Dom4j中的Document与Element解析XML文档

    Jqcode:使用Dom4j中的Document与Element解析XML文档

    作者:[db:作者] 时间:2021-09-16 10:32

    本帖是个记录学习贴,学习下如何解析xml文档,百度搜索一番,得知通过dom4j包下的Document与Element可以实现对XML文档的解析(不管是简单的xml文档或是复杂嵌套的xml文档)。

    Dom4j API文档:Dom4j

    本文主要关注的两个接口:Document、Element

    通过红框中的两个接口就可以完成对xml文档的解析。

    开始代码

    我们新建个java工程,用来学习Dom4j,因为用到此jar包,所以提前将jar包下载下来,放入工程中。

    附上dom4j-1.6.1jar包下载地址:点我

    再放一个用来测试的xml文档:

    <?xml version="1.0" encoding="utf-8"?>
    <root>
    	<head>
    		<ErrCode>1</ErrCode>
    		<ErrMsg>成功</ErrMsg>
    	</head>
    	<body>
    		<detail>
    			<UserName>小明1</UserName >
    			<Type>药费单</Type>
    			<TotalFee>121.50</TotalFee>
    			<FeeItem>
    				<ItemName>头孢XXX</ItemName>
    				<ItemType>西药费</ItemType>
    				<ItemFee>45.00</ItemFee>
    				<MedicalFee>0</MedicalFee >
    				<Unit>支</Unit >
    				<Price>55.00</Price >
    				<Type></Type >
    				<Num>1</Num>
    			</FeeItem>
    			<FeeItem>
    				<ItemName>包扎带</ItemName>
    				<ItemType>材料费</ItemType>
    				<ItemFee>21.50</ItemFee>
    				<MedicalFee>0</MedicalFee >
    				<Unit>支</Unit >
    				<Price>55.00</Price >
    				<Type></Type >
    				<Num>1</Num>
    			</FeeItem>
    		</detail>
    		<detail>
    			<UserName>小明2</UserName>
    			<Type>检查单</Type>
    			<TotalFee>46.50</TotalFee>
    			<FeeItem>
    				<ItemName>血常规</ItemName>
    				<ItemType>检验费</ItemType>
    				<ItemFee>46.50</ItemFee>
    				<MedicalFee>0</MedicalFee >
    				<Unit>支</Unit >
    				<Price>55.00</Price >
    				<Type></Type >
    				<Num>1</Num>
    			</FeeItem>
    		</detail>
    	</body>
    </root>

    我们就以上面这个xml文档来解析,我把它命名文件名为:test.xml,放在我的E盘中,目录为:E:\test.xml

    本文介绍两种获取document对象的方式:

    • 读取本地xml文件获取document对象
    • 直接根据xml内容的字符串获取document对象

    下面分别对上面两种获取document对象的方式进行示例

    第一种

    SAXReader reader = new SAXReader();
    Document doc = reader.read(new File("E:\\test.xml"));

    第二种

    String xml = "<ItemName>头孢</ItemName>";
    Document doc = DocumentHelper.parseText(xml);

    下面具体讲解解析的过程:(我们以第一种:读取本地xml文件的方式进行xml解析)

    public class Dom4j {
    	
    	@SuppressWarnings("unchecked")
    	public static void main(String[] args) {
    		try {
    			SAXReader reader = new SAXReader();
    			Document doc = reader.read(new File("E:\\test.xml"));		//读取本地xml文件
    			Element rootElement = doc.getRootElement();		// 获取document对象根节点,即最外层节点下的内容
    			Element headElement = rootElement.element("head");	// 获取根节点下的所有节点,获得<head>下的内容
    			System.out.println("[ErrCode] = " + headElement.elementText("ErrCode")); 	// 获取xml文档中标签为<ErrCode>的内容
    			Element bodyElement = rootElement.element("body");
    			List<Element> elList = bodyElement.elements("detail");
    			for (Element element : elList) {
    				System.out.println("[UserName] = " + element.elementText("UserName"));
    				List<Element> feeItemElement = element.elements("FeeItem");
    				for (Element element2 : feeItemElement) {
    					System.out.println("[ItemType] = " + element2.elementText("ItemType"));		//获取xml文档中标签为<ItemType>的内容
    				}
    			}
    		} catch (DocumentException e) {
    			e.printStackTrace();
    		}
    	}
    
    }

    以下是输出结果

    [ErrCode] = 1
    [UserName] = 小明1
    [ItemType] = 西药费
    [ItemType] = 材料费
    [UserName] = 小明2
    [ItemType] = 检验费

    可以看到,xml文档中任意深度的指定标签内容都是可以读取到的,主要用到了以下几个方法:

    getRootElement(),通过document对象的getRootElement()可以获得xml文档根节点下的内容

    element(),通过element对象的element()可以获得指定子节点下的内容

    elements(),通过element对象的elements()可以获得指定的子节点集合下的内容

    elementText(),通过element对象的elementText()可以获得指定标签的内容

    ?

    ?

    cs
    下一篇:没有了