zoukankan      html  css  js  c++  java
  • XPath语法 在C#中使用XPath示例

    XPath可以快速定位到Xml中的节点或者属性。XPath语法很简单,但是强大够用,它也是使用xslt的基础知识。

    示例Xml:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    <?xml version="1.0" encoding="utf-8" ?>
    <pets>
      <cat color="black" weight="10">
        <price>100</price>
        <desc>this is a black cat</desc>
      </cat>
      <cat color="white" weight="9">
        <price>80</price>
        <desc>this is a white cat</desc>
      </cat>
      <cat color="yellow" weight="15">
        <price>80</price>
        <desc>this is a yellow cat</desc>
      </cat>
     
     
      <dog color="black" weight="10">
        <price>100</price>
        <desc>this is a black dog</desc>
      </dog>
      <dog color="white" weight="9">
        <price>80</price>
        <desc>this is a white dog</desc>
      </dog>
      <dog color="yellow" weight="15">
        <price>80</price>
        <desc>this is a yellow dog</desc>
      </dog>
    </pets>

    XPath的语法:

    1. XPath中的符号

    符号

    说明

    示例

    示例说明

    /

    表示从根节点开始选择

    /pets

    选择根节点pets

    表示节点和子节点之间的间隔符

    /pets/dog

    选择pets节点下的dog节点

    //xx

    表示从整个xml文档中查找,而不考虑当前节点位置

    //price

    选择文档中所有的price节点

    .

    单个英文半角句点表示选择当前节点

    /pets/.

    选择pets节点

    ..

    双点,表示选择父节点

    /pets/dog[0]/..

    表示pets节点,也就是第一个dog节点的父节点

    @xx

    表示选择属性

    //dog/@color

    表示选择所有dog节点的color属性集合

    […]

    中括号表示选择条件,括号内为条件

    //dog[@color=’white’]

    所有color为white的dog节点

    //dog[/price<100]

    所有price字节点值小于100的dog节点

    中括号内数字为节点索引,类似c#等语言中的数组,数组下标是从1开始的

    //dog[1]

    第1个dog节点

    //dog[last()]

    最后一个dog节点,last()是xPath内置函数

    |

    单竖杠表示合并节点结合

    //dog[@color=’white’] | //cat[@color=’white’]

    color属性为white的dog节点和color属性为white的cat节点

    *

    星号表示任何名字的节点或者属性

    //dog/*

    表示dog节点的所有子节点

    //dog/@*

    表示dog节点的所有属性节点

    XPath是XML的查询语言,和SQL的角色很类似。以下面XML为例,介绍XPath的语法。下面的一些资料是几年前学习这个的时候,从网络以及博客园获取的一些资料,暂时找不到出处,例子和文字基本都是借鉴,再次谢过。如果大家发现类似的一起文章,告诉我链接,我加上引用。下面的Xpath的相关表达也很基础,基本足够用了。

    复制代码
    <?xml version="1.0"encoding="ISO-8859-1"?>
    <catalog>
    <cd country="USA">
    <title>Empire Burlesque</title>
    <artist>Bob Dylan</artist>
    <price>10.90</price>
    </cd>
    </catalog>
    复制代码

    定位节点:XML是树状结构,类似档案系统内数据夹的结构,XPath也类似档案系统的路径命名方式。不过XPath是一种模式(Pattern),可以选出XML档案中,路径符合某个模式的所有节点出来。例如要选catalog底下的cd中所有price元素可以用:

    /catalog/cd/price

      如果XPath的开头是一个斜线(/)代表这是绝对路径。如果开头是两个斜线(//)表示文件中所有符合模式的元素都会被选出来,即使是处于树中不同的层级也会被选出来。以下的语法会选出文件中所有叫做cd的元素(在树中的任何层级都会被选出来)://cd

    选择未知的元素:使用星号(*)可以选择未知的元素。下面这个语法会选出/catalog/cd的所有子元素:  

    /catalog/cd/*

      以下的语法会选出所有catalog的子元素中,包含有price作为子元素的元素。

    /catalog/*/price

      以下的语法会选出有两层父节点,叫做price的所有元素。

    /*/*/price

      要注意的是,想要存取不分层级的元素,XPath语法必须以两个斜线开头(//),想要存取未知元素才用星号(*),星号只能代表未知名称的元素,不能代表未知层级的元素。

    选择分支:使用中括号可以选择分支。以下的语法从catalog的子元素中取出第一个叫做cd的元素。XPath的定义中没有第0元素这种东西。

    /catalog/cd[1]

    以下语法选择catalog中的最后一个cd元素:(XPathj并没有定义first()这种函式喔,用上例的[1]就可以取出第一个元素。

    /catalog/cd[last()]

    以下语法选出price元素的值等于10.90的所有/catalog/cd元素

    /catalog/cd[price=10.90]

    选择属性:在XPath中,除了选择元素以外,也可以选择属性。属性都是以@开头。例如选择文件中所有叫做country的属性:

    //@country

    以下语法选择出country属性值为UK的cd元素

    //cd[@country='UK']
  • 相关阅读:
    Zotero群组新建后无法显示
    配置vscode的C++环境Unexpected GDB output from command "-environment-cd
    战地5
    virtual studio发布到gihub
    virtual stuido同时调试多个控制台
    js复制标题和链接
    语义理解偶然算法带来的感动
    漂亮的打火机
    雷柏鼠标vt350Q配对
    Unable to open 'free_base.cpp': Unable to read file 'c:Program FilesMicrosoft VS Codeminkernelcrtsucrtsrcappcrtheapfree_base.cpp'
  • 原文地址:https://www.cnblogs.com/vaevvaev/p/6838563.html
Copyright © 2011-2022 走看看