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(); } }
时间: 2024-10-15 12:13:49