dom4j解析xml

dom4j解析xml

xml如下:

<?xml version="1.0" encoding="UTF-8"?>
<DATA>
  <DATAINFOS uuid="批数据uuid">
  <DATAINFO>
    <DESC1 REMARK="名称1">DESC1的值</DESC1>
    <DESC2 REMARK="名称2">DESC1的值</DESC2>
    <SPECIALITYCODES>
       <SPECIALITYCODE SPECIALITYNAME="附属信息" CATEGORYCODE="" SPECIALITYCODE="ABCD">
        <VALUELIST REMARK="列表属性">
          <PROPERTYCODE PROPERTYCODE="A0001" STANDARDCODE="" PROPERTYNAME="节点编码">A0001的值</PROPERTYCODE>
		  <PROPERTYCODE PROPERTYCODE="A0002" STANDARDCODE="" PROPERTYNAME="节点编码">A0002的值</PROPERTYCODE>
        </VALUELIST>
       </SPECIALITYCODE>
	   <SPECIALITYCODE SPECIALITYNAME="附属信息" CATEGORYCODE="" SPECIALITYCODE="ABCD">
        <VALUELIST REMARK="列表属性">
          <PROPERTYCODE PROPERTYCODE="A0001" STANDARDCODE="" PROPERTYNAME="节点编码">A0001的值</PROPERTYCODE>
		  <PROPERTYCODE PROPERTYCODE="A0002" STANDARDCODE="" PROPERTYNAME="节点编码">A0002的值</PROPERTYCODE>
        </VALUELIST>
       </SPECIALITYCODE>
    </SPECIALITYCODES>
  </DATAINFO>
  <DATAINFO>
    <DESC1 REMARK="名称1">DESC1的值</DESC1>
    <DESC2 REMARK="名称2">DESC1的值</DESC2>
    <SPECIALITYCODES>
       <SPECIALITYCODE SPECIALITYNAME="附属信息" CATEGORYCODE="" SPECIALITYCODE="ABCD">
        <VALUELIST REMARK="列表属性">
          <PROPERTYCODE PROPERTYCODE="A0001" STANDARDCODE="" PROPERTYNAME="节点编码">A0001的值</PROPERTYCODE>
		  <PROPERTYCODE PROPERTYCODE="A0002" STANDARDCODE="" PROPERTYNAME="节点编码">A0002的值</PROPERTYCODE>
        </VALUELIST>
       </SPECIALITYCODE>
	   <SPECIALITYCODE SPECIALITYNAME="附属信息" CATEGORYCODE="" SPECIALITYCODE="ABCD">
        <VALUELIST REMARK="列表属性">
          <PROPERTYCODE PROPERTYCODE="A0001" STANDARDCODE="" PROPERTYNAME="节点编码">A0001的值</PROPERTYCODE>
		  <PROPERTYCODE PROPERTYCODE="A0002" STANDARDCODE="" PROPERTYNAME="节点编码">A0002的值</PROPERTYCODE>
        </VALUELIST>
       </SPECIALITYCODE>
    </SPECIALITYCODES>
  </DATAINFO>
  </DATAINFOS>
</DATA>

简单的xml可以进行转换成json然后取值很方便,但是像这种复杂的xml,转换出来的json是有问题的,所以这里用dom4j中的一些方法来解析

//先将xml转为Document
Document document = DocumentHelper.parseText(xmldata);
//获取根节点,这里取到的就是DATA节点
Element root = document.getRootElement();
//获取批数据uuid
String uuid = root.element("DATAINFOS").attributeValue("uuid");
//遍历DATAINFO,先拿到DATAINFO所在的List
List<Element> dataInfoList = root.element("DATAINFOS").elements("DATAINFO");
for(Element dataInfoEle: dataInfoList){
	//获取DESC1节点的值-->"DESC1的值"
	dataInfoEle.elementText("DESC1");
	//每一条数据document对象
	SAXReader saxReader = new SAXReader(); //加载XML文档 
    saxReader.setEncoding("UTF-8");
    Document documentRead=null;
    try{
    	String singlexmlstr = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + dataInfoEle.asXML();
    	documentRead = saxReader.read(new ByteArrayInputStream(singlexmlstr.getBytes("UTF-8")));
    }catch(Exception ex){
    	ex.printStackTrace();
    }
	//获取SPECIALITYCODES节点中的多个SPECIALITYCODE节点
	List<Element> specialityCodeList = documentRead.selectNodes("/DATAINFO/SPECIALITYCODES/SPECIALITYCODE");
	//遍历specialityCodeList
	for (Iterator specialityCodeListIter = specialityCodeList.iterator(); specialityCodeListIter.hasNext();) {
		Element specialityCode = (Element) specialityCodeListIter.next();
		//获取SPECIALITYCODE中SPECIALITYCODE属性的值-->"ABCD"
		String specilitycodename = specialityCode.attributeValue("SPECIALITYCODE");
		//获取SPECIALITYCODE节点下的所有VALUELIST节点
		List<Element> valueList = specialityCode.elements("VALUELIST");
		//遍历valueList
		for (Iterator valueListIter = valueList.iterator(); valueListIter.hasNext();){
			Element valueEle = (Element) valueListIter.next();
			//获取所有PROPERTYCODE节点
			List<Element> propertyCodeList = valueEle.elements("PROPERTYCODE");
			//遍历propertyCodeList
			for(Element propertyCode: propertyCodeList){
				//获取PROPERTYCODE节点中PROPERTYCODE属性的值-->"A0001"
				propertyCode.attributeValue("PROPERTYCODE");
				//获取PROPERTYCODE节点的值-->"A0001的值"
				propertyCode.getText();
			}
		}
	}
}

XML的格式不同,解析方式也不一样,根据实际的XML即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值