1,dom4j相对于其他xml解析技术来说,具有性能好、速度快、功能强大、编写简单等特点,所以受到广泛应用。
2,本例基于 dom4j-1.6.1.jar 编写 通用解析示例工具类,架包可点击 该名称下载。
3,工具类不针对特定xml文档结构解析,一招制敌,解析任何文档结构的xml数据,小伙伴们可以通过工具类结合自己实际项目业务需求进行封装加工。
4, 一个xml文档。
<result>
<dates>
<rstate>success</rstate>
<rcode>200</rcode>
<databasic>
<allcount>168649810</allcount>
<pageno>1</pageno>
<pagesize>2</pagesize>
</databasic>
<details>
<record>
<RID>494847331</RID>
<IR_URLTITLE>境外非政府组织在华活动被纳入法治轨道</IR_URLTITLE>
<IR_ABSTRACT>十二届全国人大常委会第二十次会议28日下午表决通过《中华人民共和国境外非政府组织境内活动管理法》。</IR_ABSTRACT>
<IR_URLNAME>http://203.192.15.131/content/20160429/Articel02004BB.htm</IR_URLNAME>
<IR_URLTIME>2017-01-01 00:00:00</IR_URLTIME>
<IR_AUTHORS>null</IR_AUTHORS>
<IR_SITENAME>新华每日电讯</IR_SITENAME>
<IR_CHANNEL>要闻</IR_CHANNEL>
<SY_INFOTYPE>7</SY_INFOTYPE>
<IR_GROUPFLAG>0</IR_GROUPFLAG>
<IR_COUNT1>null</IR_COUNT1>
<IR_COUNT2>null</IR_COUNT2>
<IR_COUNT3>null</IR_COUNT3>
<IR_ACCOUNT_UID>null</IR_ACCOUNT_UID>
<SY_BB_COMMON>null</SY_BB_COMMON>
</record>
<record>
<RID>419928990</RID>
<IR_URLTITLE>本报记者带您走进城市周边绿化现场</IR_URLTITLE>
<IR_ABSTRACT>本报记者带您走进城市周边绿化现场</IR_ABSTRACT>
<IR_URLNAME>http://paper.cynews.com.cn/File/yanduchenbao/2016-4-11/20160411093651.htm?id=176117</IR_URLNAME>
<IR_URLTIME>2016-11-04 00:00:00</IR_URLTIME>
<IR_AUTHORS>null</IR_AUTHORS>
<IR_SITENAME>燕都晨报</IR_SITENAME>
<IR_CHANNEL>null</IR_CHANNEL>
<SY_INFOTYPE>7</SY_INFOTYPE>
<IR_GROUPFLAG>0</IR_GROUPFLAG>
<IR_COUNT1>null</IR_COUNT1>
<IR_COUNT2>null</IR_COUNT2>
<IR_COUNT3>null</IR_COUNT3>
<IR_ACCOUNT_UID>null</IR_ACCOUNT_UID>
<SY_BB_COMMON>null</SY_BB_COMMON>
</record>
</details>
</dates>
</result>
5,一个保存xml结构的 实体。
package com.trs.xmldeal;
/**
* 保存xml结构基本信息实体
* @author zhaozuofa
* 2016年5月9日 下午2:19:46
*
*/
public class XmlParamer {
// 节点属性
private String xattribute;
// 节点PATH
private String xpath;
// 节点值
private String value;
public XmlParamer(String xattribute, String xpath, String value) {
this.xattribute = xattribute;
this.xpath = xpath;
this.value = value;
}
public String getXpath() {
return xpath;
}
public void setXpath(String xpath) {
this.xpath = xpath;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public String getXattribute() {
return xattribute;
}
public void setXattribute(String xattribute) {
this.xattribute = xattribute;
}
}
6,一个解析xml 的工具类
package com.trs.xmldeal;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.dom4j.tree.DefaultAttribute;
/**
* Java递归遍历XML所有元素
* @author zhaozuofa
* 2016年5月9日 下午2:18:43
*
*/
public class XmlParase {
// private static Map xmlmap = new HashMap();
//存储xml元素信息的容器
private static ArrayList<Leaf> elemList = new ArrayList<Leaf>();
public static void main(String args[]) throws DocumentException {
XmlParase test = new XmlParase();
String path = "d:\\test\\NewFile3.xml";
// 读取XML文件
SAXReader reader = new SAXReader();
Document doc = reader.read(path);
// 获取XML根元素
Element root = doc.getRootElement();
test.getElementList(root);
String x = test.getListString(elemList);
System.out.println("-----------解析结果------------\n" + x);
}
/**
* 获取节点所有属性值
* <功能详细描述>
* @param element
* @return
* @see [类、类#方法、类#成员]
*/
public String getNoteAttribute(Element element) {
String xattribute = "";
DefaultAttribute e = null;
List list = element.attributes();
for (int i = 0; i < list.size(); i++) {
e = (DefaultAttribute) list.get(i);
xattribute += " [name = " + e.getName() + ", value = " + e.getText() + "]";
}
return xattribute;
}
/**
* 递归遍历方法
* <功能详细描述>
* @param element
* @see [类、类#方法、类#成员]
*/
public void getElementList(Element element) {
List elements = element.elements();
// 没有子元素
if (elements.isEmpty()) {
String xpath = element.getPath();
String value = element.getTextTrim();
elemList.add(new Leaf(getNoteAttribute(element), xpath, value));
} else {
// 有子元素
Iterator it = elements.iterator();
while (it.hasNext()) {
Element elem = (Element) it.next();
// 递归遍历
getElementList(elem);
}
}
}
public String getListString(List elemList) {
StringBuffer sb = new StringBuffer();
for (Iterator it = elemList.iterator(); it.hasNext();) {
XmlParamer xmlp = (XmlParamer) it.next();
sb.append("xpath: " + xmlp.getXpath()).append(", value: ").append(xmlp.getValue());
if (!"".equals(xmlp.getXattribute())) {
sb.append(", Attribute: ").append(xmlp.getXattribute());
}
sb.append("\n");
}
return sb.toString();
}
}