`
favey
  • 浏览: 121607 次
  • 性别: Icon_minigender_1
  • 来自: 东莞
社区版块
存档分类
最新评论

XPath教程——实例介绍<一>

 
阅读更多

基于XPath1.0标准,通过以下22个实例介绍XPath的特性。基本的XPath语法类似于在一个文件系统中定位文件(下面实例中红色文字表示选择结果)

1、如果路径以斜线 / 开始, 那么该路径就表示到一个元素的绝对路径

(1)."/AAA"表示选择根元素AAA:

    <AAA>
          <BBB/>
          <CCC/>
          <BBB/>
          <BBB/>
          <DDD>
               <BBB/>
          </DDD>
          <CCC/>
     </AAA>

(2)."/AAA/DDD/BBB"表示选择AAA的子元素DDD的所有子元素:

    <AAA>
          <BBB/>
          <CCC/>
          <BBB/>
          <BBB/>
          <DDD>
               <BBB/>
          </DDD>
          <CCC/>
     </AAA>

2、如果路径以双斜线 // 开头, 则表示选择文档中所有满足双斜线//之后规则的元素(无论层级关系)

(1)."//BBB"表示选择所有BBB元素:

    <AAA>
          <BBB/>
          <CCC/>
          <BBB/>
          <DDD>
               <BBB/>
          </DDD>
          <CCC>
               <DDD>
                    <BBB/>
                    <
BBB/>
               </DDD>
          </CCC>
     </AAA>

 (2)."//DDD/BBB"表示选择所有父元素是DDD的BBB元素:

    <AAA

          <BBB/>
          <CCC/>
          <BBB/>
          <DDD>
               <BBB/>
          </DDD>
          <CCC>
               <DDD>
                    <BBB/>
                    <
BBB/>
               </DDD>
          </CCC>
     </AAA>

3、星号 * 表示选择所有由星号之前的路径所定位的元素

(1)."/AAA/CCC/DDD/*"表示选择所有路径依附于/AAA/CCC/DDD的元素:

    <AAA>
          <XXX>
               <DDD>
                    <BBB/>
                    <BBB/>
                    <EEE/>
                    <FFF/>
               </DDD>
          </XXX>
          <CCC>
               <DDD>
                    <BBB/>
                    <
BBB/>
                    <
EEE/>
                    <
FFF/>
               </DDD>
          </CCC>
          <CCC>
               <BBB>
                    <BBB>
                         <BBB/>
                    </BBB>
               </BBB>
          </CCC>
     </AAA>

(2). “/*/*/*/BBB”表示选择所有的有3个祖先元素的BBB元素:

   <AAA>
          <XXX>
               <DDD>
                    <BBB/>
                    <
BBB/>
                    <EEE/>
                    <FFF/>
               </DDD>
          </XXX>
          <CCC>
               <DDD>
                    <BBB/>
                    <
BBB/>
                    <EEE/>
                    <FFF/>
               </DDD>
          </CCC>
          <CCC>
               <BBB>
                    <BBB>
                         <BBB/>
                    </BBB>
               </BBB>
          </CCC>
     </AAA>

4、方块号里的表达式可以进一步的指定元素, 其中数字表示元素在选择集里的位置, 而last()函数则表示选择集中的最后一个元素

(1)."/AAA/BBB[1]"表示选择AAA的第一个BBB子元素:

    <AAA>
          <BBB/>
          <BBB/>
          <BBB/>
          <BBB/>
     </AAA>

(2).“/AAA/BBB[last()]‘表示选择AAA的最后一个BBB子元素:

     <AAA>
          <BBB/>
          <BBB/>
          <BBB/>
          <BBB/>
     </AAA>

5、属性通过前缀 @ 来指定

(1)."//@id"表示选择所有的id属性:

<AAA>
          <BBB id = "b1"/>
          <BBB id = "b2"/>
          <BBB name = "bbb"/>
          <BBB/>
     </AAA>

(2)."//BBB[@id]"表示选择有id属性的BBB元素:

<AAA>
          <BBB id = "b1"/>
          <BBB id = "b2"/>
          <BBB name = "bbb"/>
          <BBB/>
     </AAA>

(3)."//BBB[@*]"表示选择有任意属性的BBB元素:

     <AAA>
          <BBB id = "b1"/>
          <BBB id = "b2"/>
          <BBB name = "bbb"/>
          <BBB/>
     </AAA>

(4)."//BBB[not(@*)]"表示选择没有属性的BBB元素:

    <AAA>
          <BBB id = "b1"/>
          <BBB id = "b2"/>
          <BBB name = "bbb"/>
          <BBB/>
     </AAA>

6、属性的值可以被用来作为选择的准则, normalize-space函数删除了前部和尾部的空格, 并且把连续的空格串替换为一个单一的空格

(1)."//BBB[@name='bbb']"表示选择含有属性name且其值为'bbb'的BBB元素:

    <AAA>
          <BBB id = "b1"/>
          <BBB name = " bbb "/>
          <BBB name = "bbb"/>
     </AAA>

(2)."//BBB[normalize-space(@name)='bbb']"表示选择含有属性name且其值(在用normalize-space函数去掉前后空格后)为'bbb'的BBB元素:

     <AAA>
          <BBB id = "b1"/>
          <BBB name = " bbb "/>
          <BBB name = "bbb"/>
     </AAA>

7、count()函数可以计数所选元素的个数

(1)."//*[count(BBB)=2]"表示选择含有2个BBB子元素的元素:

     <AAA>
          <CCC>
               <BBB/>
               <BBB/>
               <BBB/>
          </CCC>
          <DDD>
               <BBB/>
               <BBB/>
          </DDD>
          <EEE>
               <CCC/>
               <DDD/>
          </EEE>
     </AAA>

(2).”//*[count(*)=2]“表示选择含有2个子元素的元素:

     <AAA>
          <CCC>
               <BBB/>
               <BBB/>
               <BBB/>
          </CCC>
          <DDD>
               <BBB/>
               <BBB/>
          </DDD>
          <EEE>
               <CCC/>
               <DDD/>
          </EEE>
     </AAA>

8、name()函数返回元素的名称, start-with()函数在该函数的第一个参数字符串是以第二个参数字符开始的情况返回true, contains()函数当其第一个字符串参数包含有第二个字符串参数时返回true

(1).”//*[name()='BBB']“表示选择所有名称为BBB的元素(这里等价于//BBB):

     <AAA>
          <BCC>
               <BBB/>
               <
BBB/>
               <
BBB/>
          </BCC>
          <DDB>
               <BBB/>
               <
BBB/>
          </DDB>
          <BEC>
               <CCC/>
               <DBD/>
          </BEC>
     </AAA>

(2)."//*[starts-with(name(),'B')]"表示选择所有名称以"B"起始的元素:

     <AAA>
          <BCC>
               <
BBB/>
               <
BBB/>
               <
BBB/>
          </
BCC>
          <DDB>
               <BBB/>
               <
BBB/>
          </DDB>
          <BEC>
               <CCC/>
               <DBD/>
          </BEC>
     </AAA>

(3)."//*[contains(name(),'C')]"表示选择所有名称包含"C"的元素:

     <AAA>
          <BCC>
               <BBB/>
               <BBB/>
               <BBB/>
          </BCC>
          <DDB>
               <BBB/>
               <BBB/>
          </DDB>
          <BEC>
               <CCC/>
               <DBD/>
          </BEC>
     </AAA>

9、string-length函数返回字符串的字符数,你应该用&lt;替代<, 用&gt;代替>

(1).”//*[string-length(name()) = 3]”表示选择名字长度为3的元素:

     <AAA>
          <Q/>
          <SSSS/>
          <BB/>
          <CCC/>
          <DDDDDDDD/>
          <EEEE/>
     </AAA>

(2)."//*[string-length(name()) < 3]"表示//*[string-length(name()) < 3](大于号同样适用):

     <AAA>
          <Q/>
          <SSSS/>
          <BB/>
          <CCC/>
          <DDDDDDDD/>
          <EEEE/>
     </AAA>

10、多个路径可以用分隔符 | 合并在一起

(1)."//CCC | //BBB"表示选择所有的CCC和BBB元素:

     <AAA>
          <BBB/>
          <
CCC/>
          <DDD>
               <CCC/>
          </DDD>
          <EEE/>
     </AAA>

(2)."/AAA/EEE | //BBB"表示选择所有的BBB元素和所有子元素是AAA的EEE元素:

     <AAA>
          <BBB/>
          <CCC/>
          <DDD>
               <CCC/>
          </DDD>
          <EEE/>
     </AAA>

(3)."/AAA/EEE | //DDD/CCC | /AAA | //BBB"表示可以合并的路径数目没有限制:

     <AAA>
          <
BBB/>
          <CCC/>
          <DDD>
               <CCC/>
          </DDD>
          <EEE/>
     </
AAA>

11、child轴(axis)包含上下文节点的子元素, 作为默认的轴,可以忽略不写

(1)."/child::AAA"等价于/AAA:

     <AAA>
          <BBB/>
          <CCC/>
     </AAA>

(2)."/child::AAA/child::BBB"等价于/AAA/BBB:

     <AAA>
          <BBB/>
          <CCC/>
     </AAA>

(3)."/child::AAA/BBB":

     <AAA>
          <BBB/>
          <CCC/>
     </AAA>

分享到:
评论

相关推荐

    C#XML入门经典 C#编程人员必备的XML技能.part2

    在.NET中实现DOM&lt;br&gt;&lt;br&gt;6.1 文档对象模型&lt;br&gt;6.1.1 文档对象模型与流...实例&lt;br&gt;6.3.4 编辑XML文档&lt;br&gt;6.4 案例分析&lt;br&gt;6.4.1 体系结构&lt;br&gt;6.4.2 应用程序详细信息&lt;br&gt;6.4.3 加载用户联系人&lt;br&gt;6.4.4 搜索联系人&lt;br...

    digester jar包大全

    例如,如果XML中有`&lt;server&gt;&lt;database&gt;`这样的结构,我们可以设置规则,让Digester在遇到`&lt;database&gt;`元素时创建一个新的数据库对象,并将其添加到服务器对象中。 Digester的核心概念包括: 1. **Rules**: 规则...

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

    例如,如果你有一个XML文档,并且想要找到所有的`&lt;item&gt;`元素,你可以使用`XPath.selectNodes("/root/item")`。这个方法对处理大量结果非常有用,因为返回的结果集可以方便地进行迭代。 2. `XPath.selectSingleNode...

    商业编程-源码-XML同学录系统源码.zip

    本篇文章将深入探讨一个基于XML的商业编程项目——“XML同学录系统”,分析其核心概念、设计原理以及源码实现。 一、XML同学录系统的核心概念 XML同学录系统主要利用XML文件来存储和管理同学的信息。XML文档由一...

    XML数据操作

    doc.LoadXml("&lt;INFO&gt;&lt;agentpickID&gt;123&lt;/agentpickID&gt;&lt;agentcorpid&gt;456&lt;/agentcorpid&gt;&lt;TotalNum&gt;789&lt;/TotalNum&gt;&lt;ROW&gt;&lt;agentpickitemID&gt;111&lt;/agentpickitemID&gt;&lt;CardtypeID&gt;222&lt;/CardtypeID&gt;&lt;Typename&gt;Type1&lt;/Typename&gt;...

    xpath表达式完整实例

    ### Xpath表达式完整实例知识点解析 #### 一、Xpath基本概念 Xpath是一种用于在XML文档中查询和定位节点的语言。它提供了一种简洁有效的方式来选择文档中的元素和属性。 - **节点类型**: - **Element(元素节点...

    XML实例.rar

    在描述的“SM3中xml实例代码”中,SM3可能是指中国的国密算法标准——SM3散列函数,它通常用于数字签名和消息认证码的生成。XML实例与SM3的结合,可能涉及到将SM3计算的结果以XML格式存储或传输。 XML的基本结构...

    XML初学进阶——XML基础帮手

    8. **XPath和XSLT**:XPath是一种查询XML文档的语言,用来选取节点或节点集。XSLT(Extensible Stylesheet Language Transformations)则用于转换XML文档,通过样式表将XML数据转化为HTML、PDF或其他格式。 9. **...

    Dom4jProject.zip

    List&lt;Node&gt; nodes = xpath.selectNodes(document); for (Node node : nodes) { // 处理查询结果 } ``` 5. 修改XML文档:通过`Element`接口提供的方法,可以对元素进行添加、删除和修改操作。 ```java Element new...

    轻松搞定XML语言(要下的快)

    例如,`&lt;book&gt;`可以表示一本书,而`&lt;title&gt;`和`&lt;author&gt;`则分别表示书名和作者。属性则为元素提供额外的信息,如`&lt;book id="123"&gt;`中的"id"属性。标签用于包围元素内容,比如`&lt;title&gt;编程之道&lt;/title&gt;`。 XML的规范...

    XML实用教程课程2006

    10. **XML实例**:本教程中可能包含的PPT可能讲解了XML的基本元素创建、文档结构设计以及如何编写简单的XML文档。部分代码可能涉及XML的解析、数据提取以及如何使用XPath和XSLT进行操作。 通过这个“XML实用教程...

    《无废话XML》——两只老虎

    - 所有元素必须正确闭合,例如`&lt;element&gt;&lt;/element&gt;`或者`&lt;element/&gt;`。 - 属性值必须用引号括起来,例如`&lt;element name="value"&gt;`。 #### 2.2 注释与处理指令 - **注释**:XML文档中的注释用`&lt;!-- --&gt;`标记,例如...

    xStream完美转换XML、JSON

    在进行XML到JSON的转换时,xStream使用了JSONPath的概念,这是一种类似于XPath的语言,用于在JSON文档中查找和操作数据。通过内部的转换机制,xStream可以将XML的树状结构转换为JSON的键值对形式。例如,上述XML示例...

    C#操作xml文件生成实例源码

    C#的`System.Xml.Linq`命名空间提供了另一种处理XML的方法——LINQ to XML,它使用更简洁的语法和面向对象的方式来操作XML,适合于.NET Framework 3.5及更高版本。例如,使用LINQ to XML生成上面的XML文件可以简化为...

    网站建设——XML初级教程

    元素是XML的基本构建块,用尖括号(&lt;&gt;)包围。元素可以有属性,提供额外的信息。内容可以用字符数据(CDATA)或实体引用来表示。 2. **命名规则**:XML的元素、属性、命名空间等都遵循一定的命名规则,如名称必须以...

    PHP网站实例开发源码——HMJ采集器.rar

    【PHP网站实例开发源码——HMJ采集器.rar】是一个包含PHP编程语言的网站应用实例,主要用于实现数据采集功能。这个实例源码是HMJ采集器的版本1.31,构建日期为2006年03月28日。通过这个压缩包,开发者可以学习到PHP...

    TinyXML——类库+doc

    例如,在`&lt;element&gt;text&lt;/element&gt;`中,“text”就是TiXmlText对象。 5. **TiXmlComment**和**TiXmlDeclaration**:分别用于处理XML文档中的注释和声明部分。 6. **TiXmlCursor**:虽然在TinyXML官方文档中没有...

Global site tag (gtag.js) - Google Analytics