`
scenery_86
  • 浏览: 47022 次
社区版块
存档分类
最新评论

JDom + XPath 解析XML

    博客分类:
  • XML
阅读更多
java 代码
  1. package cn.flyingsoft.oais.service.exchange.entity.impl;   
  2.   
  3. import java.io.IOException;   
  4. import java.util.List;   
  5.   
  6. import org.jdom.Document;   
  7. import org.jdom.Element;   
  8. import org.jdom.JDOMException;   
  9. import org.jdom.input.SAXBuilder;   
  10. import org.jdom.xpath.XPath;   
  11.   
  12. import cn.flyingsoft.oais.di.ip.entity.DataMap;   
  13. import cn.flyingsoft.oais.di.ip.entity.Field;   
  14. import cn.flyingsoft.oais.di.ip.entity.ValueText;   
  15.   
  16. /**  
  17.  * 数据格式:根结点:data,子节点:多个package,子节点的子:description、content(可包含多个package)  依次嵌套  
  18.  * @author jin 2007-04-05  
  19.  *  
  20.  */  
  21. public class ParseXML {   
  22.     //constructor   
  23.     public ParseXML(){}   
  24.        
  25.     //读取根结点   
  26.     public void parseRoot(String xmlPath){   
  27.         try {   
  28.                 SAXBuilder saxBuilder = new SAXBuilder() ;   
  29.                 Document doc = saxBuilder.build(xmlPath) ;   
  30.                 Element root = doc.getRootElement() ;   
  31.                 //读取根结点的属性   
  32.                 String version = root.getAttributeValue("version") ;   
  33.                 String createdate = root.getAttributeValue("createdate") ;   
  34.                 //根结点下是否含有Package节点   
  35.                 if(root.getChildren().size()>0){   
  36.                     //读取根结点的所有子节点(即Package节点)   
  37.                     List rootChildList = XPath.selectNodes(root,"/data/*") ;   
  38.                     for(int i = 0; i<rootChildList.size(); i++){   
  39.                         //读取其中一个根结点的子节点(即 Package节点)   
  40.                         Element packageElement = (Element) rootChildList.get(i) ;   
  41.                         parsePackage(packageElement) ;   
  42.                     }   
  43.                 }   
  44.         } catch (JDOMException e) {   
  45.             // TODO 自动生成 catch 块   
  46.             e.printStackTrace();   
  47.         } catch (IOException e) {   
  48.             // TODO 自动生成 catch 块   
  49.             e.printStackTrace();   
  50.         }   
  51.            
  52.     }   
  53.        
  54.     //读取根结点下的一个Package子节点   
  55.     private void parsePackage(Element pkgElement){   
  56.         try {   
  57.                 //读取Package节点下的Description节点   
  58.                 Element descriptionElement = (Element) XPath.selectSingleNode(pkgElement,"child::Description") ;   
  59.                 //读取Description节点下的所有子节点   
  60.                 List descriptionChildList = XPath.selectNodes(descriptionElement,"child::*") ;   
  61.                 DataMap desDataMap = new DataMap() ;   
  62.                 //遍历Description所有子节点   
  63.                 for(int i = 0; i<descriptionChildList.size(); i++){   
  64.                     //读取一个Description的子节点   
  65.                     Element childElement = (Element) descriptionChildList.get(i) ;   
  66.                     //读取该节点的值   
  67.                     String value = childElement.getValue() ;   
  68.                     //将所有Description子节点的内容以键-值对应放入Map   
  69.                     desDataMap.put(new Field(childElement.getName()),new ValueText(value)) ;   
  70.                 }   
  71.                 System.out.println(desDataMap) ;   
  72.                 //是否含有Content节点   
  73.                 if(pkgElement.getChildren().size()>1){   
  74.                     //读取所有该Package节点下的Content节点   
  75.                     List contentElementList = XPath.selectNodes(pkgElement,"child::Content") ;   
  76.                     //遍历Package节点下的所有Content节点   
  77.                     for(int j = 0; j<contentElementList.size(); j++){   
  78.                         //读取一个Content节点   
  79.                         Element contentElement = (Element) contentElementList.get(j) ;   
  80.                         //递归给下面读取Content的方法   
  81.                         parseContent(contentElement) ;   
  82.                     }   
  83.                 }   
  84.         } catch (JDOMException e) {   
  85.             // TODO 自动生成 catch 块   
  86.             e.printStackTrace();   
  87.         }   
  88.     }   
  89.        
  90.     //读取一个Content节点   
  91.     private void parseContent(Element contentElement){   
  92.         //是否含有Package节点   
  93.         if(contentElement.getChildren().size()>0){   
  94.             try {   
  95.                     //读取Content节点下的所有Package节点   
  96.                     List contentChildList = XPath.selectNodes(contentElement,"child::Package") ;   
  97.                     //遍历Content节点下的所有Package节点   
  98.                     for(int i = 0; i<contentChildList.size(); i++){   
  99.                         //读取一个Package节点   
  100.                         Element contentChildPackage = (Element) contentChildList.get(i) ;   
  101.                         //递归给上面读取Package的方法   
  102.                         parsePackage(contentChildPackage) ;   
  103.                     }   
  104.             } catch (JDOMException e) {   
  105.                 // TODO 自动生成 catch 块   
  106.                 e.printStackTrace();   
  107.             }   
  108.         }   
  109.            
  110.     }   
  111.        
  112.        
  113.        
  114.     //main函数   
  115.     public static void main(String[] args){   
  116.         ParseXML p = new ParseXML();   
  117.         p.parseRoot("D:/sip.xml") ;   
  118.            
  119.     }   
  120. }   
xml 代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <data version="1.0" createdate="2006-01-01 23:10:10">  
  3.     <Package>  
  4.         <Description>  
  5.             <全宗号>02</全宗号>  
  6.             <档号>A0091</档号>  
  7.             <案卷号></案卷号>  
  8.             <合同编号></合同编号>  
  9.             <合同代码></合同代码>  
  10.             <分部分项代号></分部分项代号>  
  11.             <单元工程代号></单元工程代号>  
  12.             <合同类型></合同类型>  
  13.             <档案类型></档案类型>  
  14.             <资料类型></资料类型>  
  15.             <分类号></分类号>  
  16.             <类目名称></类目名称>  
  17.             <案卷顺序号></案卷顺序号>  
  18.             <案卷题名>关于右岸工程关于右岸工程关于右岸工程关于右岸工程关于右岸工程关于右岸工程关于右岸工程关于右岸工程关于右岸工程</案卷题名>  
  19.             <立卷单位>关于右岸工程</立卷单位>  
  20.             <起止日期></起止日期>  
  21.             <保管期限></保管期限>  
  22.             <密级></密级>  
  23.             <文件件数></文件件数>  
  24.             <总页数></总页数>  
  25.             <卷盒宽度></卷盒宽度>  
  26.             <库位号></库位号>  
  27.             <套数></套数>  
  28.             <备注></备注>  
  29.         </Description>  
  30.         <Content>  
  31.             <Package>  
  32.                 <Description>  
  33.                     <全宗号>23</全宗号>  
  34.                     <档号></档号>  
  35.                     <档案类型></档案类型>  
  36.                     <合同代码></合同代码>  
  37.                     <合同类型></合同类型>  
  38.                     <分部分项代号></分部分项代号>  
  39.                     <单元工程代号></单元工程代号>  
  40.                     <合同编号></合同编号>  
  41.                     <分类号></分类号>  
  42.                     <类目名称></类目名称>  
  43.                     <案卷号></案卷号>  
  44.                     <卷内顺序号>23</卷内顺序号>  
  45.                     <文件编号></文件编号>  
  46.                     <题名>关于右岸工程关于右岸工程关于右岸工程关于右岸工程关于右岸工程关于右岸工程关于右岸工程</题名>  
  47.                     <责任者></责任者>  
  48.                     <文件类别代码></文件类别代码>  
  49.                     <页数></页数>  
  50.                     <页次></页次>  
  51.                     <保管期限></保管期限>  
  52.                     <密级></密级>  
  53.                     <日期></日期>  
  54.                     <图纸幅面></图纸幅面>  
  55.                     <版本号></版本号>  
  56.                     <原文路径>  
  57.                     </原文路径>  
  58.                     <备注></备注>  
  59.                 </Description>  
  60.                 <Content>  
  61.                 </Content>  
  62.             </Package>  
  63.         </Content>  
  64.     </Package>  
  65.     <Package>  
  66.         <Description>  
  67.             <全宗号>03</全宗号>  
  68.             <档号>A0092</档号>  
  69.             <案卷号></案卷号>  
  70.             <合同编号></合同编号>  
  71.             <合同代码></合同代码>  
  72.             <分部分项代号></分部分项代号>  
  73.             <单元工程代号></单元工程代号>  
  74.             <合同类型></合同类型>  
  75.             <档案类型></档案类型>  
  76.             <资料类型></资料类型>  
  77.             <分类号></分类号>  
  78.             <类目名称></类目名称>  
  79.             <案卷顺序号></案卷顺序号>  
  80.             <案卷题名>关于右岸工程关于右岸工程关于右岸工程关于右岸工程关于右岸工程关于右岸工程关于右岸工程关于右岸工程关于右岸工程</案卷题名>  
  81.             <立卷单位>关于右岸工程</立卷单位>  
  82.             <起止日期></起止日期>  
  83.             <保管期限></保管期限>  
  84.             <密级></密级>  
  85.             <文件件数></文件件数>  
  86.             <总页数></总页数>  
  87.             <卷盒宽度></卷盒宽度>  
  88.             <库位号></库位号>  
  89.             <套数></套数>  
  90.             <备注></备注>  
  91.         </Description>  
  92.         <Content>  
  93.             <Package>  
  94.                 <Description>  
  95.                     <全宗号>31</全宗号>  
  96.                     <档号></档号>  
  97.                     <档案类型></档案类型>  
  98.                     <合同代码></合同代码>  
  99.                     <合同类型></合同类型>  
  100.                     <分部分项代号></分部分项代号>  
  101.                     <单元工程代号></单元工程代号>  
  102.                     <合同编号></合同编号>  
  103.                     <分类号></分类号>  
  104.                     <类目名称></类目名称>  
  105.                     <案卷号></案卷号>  
  106.                     <卷内顺序号>31</卷内顺序号>  
  107.                     <文件编号></文件编号>  
  108.                     <题名>关于右岸工程关于右岸工程关于右岸工程关于右岸工程关于右岸工程关于右岸工程关于右岸工程</题名>  
  109.                     <责任者></责任者>  
  110.                     <文件类别代码></文件类别代码>  
  111.                     <页数></页数>  
  112.                     <页次></页次>  
  113.                     <保管期限></保管期限>  
  114.                     <密级></密级>  
  115.                     <日期></日期>  
  116.                     <图纸幅面></图纸幅面>  
  117.                     <版本号></版本号>  
  118.                     <原文路径>  
  119.                     </原文路径>  
  120.                     <备注></备注>  
  121.                 </Description>  
  122.                 <Content>  
  123.                 </Content>  
  124.             </Package>  
  125.             <Package>  
  126.                 <Description>  
  127.                     <全宗号>32</全宗号>  
  128.                     <档号></档号>  
  129.                     <档案类型></档案类型>  
  130.                     <合同代码></合同代码>  
  131.                     <合同类型></合同类型>  
  132.                     <分部分项代号></分部分项代号>  
  133.                     <单元工程代号></单元工程代号>  
  134.                     <合同编号></合同编号>  
  135.                     <分类号></分类号>  
  136.                     <类目名
分享到:
评论

相关推荐

    XML解析,简单易学(Jdom+XPath): 精简Demo(含jar包).rar

    Jdom2 解析XML,代码简单精悍,上手比较容易。

    jdom1.1.3xml解析工具类

    JDOM是由以下几个包组成的: org.jdom包含了所有的xml文档要素的java类 org.jdom.adapters包含了与dom适配的java类 org.jdom.filter包含了xml文档的过滤器类 org.jdom....org.jdom.xpath包含了对xml文档xpath操作的类

    自己总结的操作xml文件的方法

    用jdom 操作xml文档 jdom+xpath 操作 xml 文档 Xstream

    xpathDemo.zip

    xpathDemo.zip 一个用JDOM/Xpath解析xml的demo,网上看的大多只是在网页显示代码,自己综合做了个DEMO,附带资料

    Java解析XML汇总DOM_SAX_JDOM_DOM4j_XPath

    Java解析XML汇总DOM_SAX_JDOM_DOM4j_XPath 实例

    各种方法解析XML

    dom4j,jdom生成和解析XML文档实例,使用基于事件的SAX解析XML文档实例,使用jquery,javascript动态的生成DOM实例,使用jquery,javascript解析ajax回传的XML文档实例,jquery,javascript的ajax技术使用实例,Xpath的...

    jdom.jar,dom4j.jar,dom.jar,sax.jar,jaxen.jar解析xmljar包

    这是java解析xml所必须的jar包,包括dom.jar dom4j.jar sax.jar jdom.jar jaxen.jar(xpath必须包).

    JDOM(java)使用详解及实例

    1、org.JDOM这个包里的类是你J解析xml文件后所要用到的所有数据类型。 Attribute CDATA Coment DocType Document Element EntityRef Namespace ProscessingInstruction Text 2、org.JDOM.transform在涉及...

    XpathDemo.zip

    JsoupXPath是基于Jsoup的拓展,使用路径的形式解析XML和HTML文档。核心类为JXDocument;JsoupXPath的节点对象JXNode不仅可以获取标签节点,还可以获取属性节点 HtmlCleaner是一个开源的Java语言的Html文档解析器。...

    XML解析-dom4j.jar-jdom.jar

    Dom4j是一个易用的、开源的库,用于XML,XPath和XSLT。它应用于Java平台,采用了Java集合框架并完全支持DOM,SAX和JAXP。

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    3.2.4 用dom解析xml文档实例 53 3.3 使用sax解析xml文档 65 3.3.1 sax的处理机制 66 3.3.2 配置sax解析器 69 3.3.3 sax解析器工厂 70 3.3.4 sax的异常类 71 3.3.5 errorhandler接口 73 3.3.6 使用sax解析xml...

    疯狂XML讲义 源码

    第三部分介绍了DOM、SAX、JAXP、dom4j、JDOM、XQuery和XQJ等,其中的DOM、SAX、JAXP、dom4i和JDOM都以结构化的方式来创建、解析XML文档,从而可以将XML文档作为数据传输工具,而XQuery则是一种新规范,通过X Query...

    疯狂xml讲义

    第三部分介绍了DOM、SAX、JAXP、dom4j、JDOM、XQuery和XQJ等,其中的DOM、SAX、JAXP、dom4j和JDOM都以结构化的方式来创建、解析XML文档,从而可以将XML文档作为数据传输工具,而XQuery则是一种新规范,通过XQuery...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part4

    3.2.4 用dom解析xml文档实例 53 3.3 使用sax解析xml文档 65 3.3.1 sax的处理机制 66 3.3.2 配置sax解析器 69 3.3.3 sax解析器工厂 70 3.3.4 sax的异常类 71 3.3.5 errorhandler接口 73 3.3.6 使用sax解析xml...

    疯狂XML讲义.part3.rar

    第三部分介绍了DOM、SAX、JAXP、dom4j、JDOM、XQuery和XQJ等,其中的DOM、SAX、JAXP、dom4j和JDOM都以结构化的方式来创建、解析XML文档,从而可以将XML文档作为数据传输工具,而XQuery则是一种新规范,通过XQuery...

    疯狂XML讲义

    第三部分介绍了DOM、SAX、JAXP、dom4j、, JDOM、XQuery和XQJ等,其中的DOM、SAX、JAXP、dom4j和JDOM都以结构化的, 方式来创建、解析XML文档,从而可以将XML文档作为数据传输工具,而, XQuery则是一种新规范,通过...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    3.2.4 用dom解析xml文档实例 53 3.3 使用sax解析xml文档 65 3.3.1 sax的处理机制 66 3.3.2 配置sax解析器 69 3.3.3 sax解析器工厂 70 3.3.4 sax的异常类 71 3.3.5 errorhandler接口 73 3.3.6 使用sax解析xml...

    疯狂XML讲义(Web Service).pdf

    第三部分介绍了DOM、SAX、JAXP、dom4j、JDOM、XQuery和XQJ等,其中的DOM、SAX、JAXP、dom4j和JDOM都以结构化的方式来创建、解析XML文档,从而可以将XML文档作为数据传输工具,而XQuery则是一种新规范,通过XQuery...

    xml 几种解析法总结

    其中包含 dom,jdom,sax,以及xpath等常用解析法。

Global site tag (gtag.js) - Google Analytics