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

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

    在Java中,解析XML有多种方式,其中JDOM和XPath是两种常用的库。 **JDOM**(Java Document Object Model)是Java语言中专为处理XML设计的一个API。它提供了一种构建和操作XML文档的模型,使得开发者可以方便地在...

    基于jdom的xpath解析数据

    然后,我们需要创建一个`SAXBuilder`对象来解析XML文件,生成`Document`对象,这是JDOM的核心类,表示整个XML文档。 ```java import org.jdom2.Document; import org.jdom2.input.SAXBuilder; SAXBuilder builder ...

    JDOM中XPath.selectNodes()和XPath.selectSingleNode()用法

    在这个示例中,我们首先创建了一个`SAXBuilder`来解析XML文件,然后通过`XPathFactory`创建了`XPath`实例。接着,我们编译了XPath表达式(例如`//item`,表示查找所有`&lt;item&gt;`元素),然后使用`evaluate()`方法来...

    使用JDOM解析XML文件

    本篇文章将深入探讨如何使用JDOM解析XML文件。 首先,我们需要理解JDOM的基本结构。JDOM通过Document对象表示整个XML文档,Element代表XML元素,Attribute表示元素属性,Text表示元素内的文本内容。这些类构成了...

    dom+xpath的jar

    DOM是一种标准的W3C推荐模型,用于解析和表示XML文档的结构,而XPath则是一种在XML文档中查找信息的语言。在这个场景中,"dom+xpath的jar"指的是包含DOM和XPath功能的Java库,通常可能是如JDOM或DOM4J这样的第三方库...

    用jdom解析xml文件

    JDOM是Java中一个专门用来解析XML的库,它提供了方便的API来读取、修改和创建XML文档。在这个例子中,我们将深入探讨如何使用JDOM解析XML文件,并进行遍历与构建。 首先,我们需要了解JDOM的基本概念。JDOM主要由三...

    jdom+dom4j解析xml.docx

    本文将详细讲解这两个库在解析XML时的关键方法和技巧。 首先,我们来看JDOM。JDOM是一个专为Java设计的API,用于处理XML文档。以下是一些核心操作: 1. **解析XML**: - 使用`SAXBuilder`来构建XML文档对象,例如...

    jdom.jar解析xml

    本文将详细介绍JDOM库及其在解析XML时的优势。 JDOM,全称为Java Document Object Model,是由Java语言实现的XML DOM解析器。DOM是一种与平台和语言无关的接口,它提供了一种标准的方式来表示XML文档的结构,并允许...

    java jdom解析xml

    Java JDOM解析XML是Java开发中处理XML文档的一种方法,JDOM全称为Java Document Object Model,它是一个基于Java语言的API,用于创建、修改和读取XML文档。JDOM为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操作的类

    xpath读取XML节点

    2. **读取XML文件**:使用`SAXBuilder`类解析XML文件,创建一个`Document`对象,这是JDOM中的XML文档模型。 ```java File xmlFile = new File("path_to_your_xml_file"); SAXBuilder builder = new SAXBuilder(); ...

    jdom 读取XML 文件

    在IT领域,XML(eXtensible Markup Language)是一种用于存储和传输数据的标准化格式,尤其在处理结构化数据时...在实际应用中,结合JDOM与其他工具,如XPath表达式来查询XML数据,可以进一步提高代码的灵活性和效率。

    jdom+dom4j

    本文将深入探讨JDOM和DOM4J,以及它们在解析XML时的应用。 **JDOM** JDOM,全称Java Document Object Model,是一个专为Java设计的API,用于处理XML文档。它提供了对XML的高效、灵活和直接的访问。JDOM的目标是提供...

    jdom4j解析xml

    ### jdom4j解析XML实例详解 #### 生成XML文档 在示例代码中,`generateXML`方法用于创建一个XML文档。首先,通过`DocumentHelper.createDocument()`调用创建了一个空白的`Document`对象,这相当于创建了一个XML文件...

    java 使用JDOM解析xml文件.docx

    其次,JDOM 库支持多种 XML 解析方式,包括 SAX、DOM 和 XPath 等。最后,JDOM 库提供了高效的解析性能,能够快速地解析大型 XML 文件。 使用 JDOM 库解析 XML 文件是一种简单易用的方式,能够快速地解析和处理 XML...

    JDOM解析XML

    在Java中,解析XML有多种方法,其中之一就是使用JDOM库。JDOM,全称Java Document Object Model,是专门为Java设计的一个解析XML的API,它提供了方便的构建和操作XML文档的方法。 JDOM的优势在于它完全基于Java,...

    jdom解析xml文件小实例

    JDOM是Java领域中一个专门用来解析XML的库,它提供了一种高效且易于使用的API来处理XML文档。在这个小实例中,我们将深入探讨如何使用JDOM解析XML文件。 首先,我们需要引入JDOM的依赖。在Java项目中,如果你使用的...

    JDOM+API.rar

    5. **解析XML**:如果从XML文件开始,可以使用`SAXBuilder`或`DOMBuilder`解析文件,得到`Document`对象。 6. **查询和修改XML**:通过`Element`的`getChild()`、`getChildren()`和`setAttribute()`等方法进行查询...

    xstream_dom4j_jdom_groovy解析xml

    在IT行业中,XML(eXtensible ...在压缩包中的"Tests"文件可能是测试用例,用于演示这些库在解析XML时的实际应用。通过运行这些测试,开发者可以更直观地了解每个库的用法,并掌握它们在处理不同XML场景下的表现。

    Dom4j 、XPath解析Xml所需的jar包和dom4j API

    在Java编程中,解析XML文档通常需要借助库,如DOM4J和XPath。DOM4J是一个灵活且功能强大的开源Java XML API,它提供了XML的读取、写入、修改和遍历等功能。XPath则是W3C标准中的一个查询语言,用于在XML文档中查找...

Global site tag (gtag.js) - Google Analytics