在xQuery中选择第n个子项/选择下一个元素

时间:2010-12-17 07:09:47

标签: select xquery

我无法找到好的xQuery教程,基本上我要做的是从这个html节点中检索文本etc...

<div class="venue">
    <div class="vitem">
        <p style="padding: 6px 0pt 0pt;" class="label">ADDRESS:</p>
        <p class="item-big">blabla</p>
    </div><br class="clear">
    <div class="vitem">
        <p style="padding: 6px 0pt 0pt;" class="label">PHONE:</p>
        <p class="item-big">123</p>
    </div><br class="clear">
    <div class="vitem">
        <p style="padding: 6px 0pt 0pt;" class="label">WEB:</p>
        <p class="item-big">etc...</p>
    </div><br class="clear">
</div>

我想知道如何从第三个​​ div[@class="vitem"]中的第二个p中获取数据 或者p 直接关注 包含<{em> 文本p[@class="label"]

WEB:

编辑:Answeres已经提供了很多帮助,但我的第二个问题是布局是否会改变为这样的

<div class="venue">
    <div class="vitem">
        <p style="padding: 6px 0pt 0pt;" class="label">ADDRESS:</p>
        <p class="item-big">blabla</p>
    </div><br class="clear">
    <div class="vitem">
        <p style="padding: 6px 0pt 0pt;" class="label">WEB:</p>
        <p class="item-big">etc...</p>
    </div><br class="clear">
</div>

如何获得etc...,只知道它跟随包含文本WEB:的类标签的p?它不再是div [3] / p [2]

谢谢!

2 个答案:

答案 0 :(得分:3)

  

我想知道怎么才能得到   第三个数据中的第二个数据   的div [@类= “VITEM”]

使用

/*/div[@class='vitem'][3]/p[2]/text()

这意味着:获取具有值p的属性div的所有class元素中的第三个的第二个"vitem"子项的所有文本节点子节点是顶级元素的孩子。

  

或者直接跟随p   p [@ class =“label”]与数据WEB:

使用

/*/div[@class='vitem'][3]/p[@class='label']
                             /following-sibling::p[1]/text()

这意味着:获取p元素的第一个后续兄弟p的所有文本节点子元素,其中class属性值为"label",这是一个孩子属性为div且值为class的所有"vitem"元素中的三分之一,并且是顶级元素的子元素。

更新:OP已经添加了第二个问题:他只想选择p作为字符串值的文本“etc ...”

使用

/*/div/p[.='etc...']

答案 1 :(得分:1)

  

我想知道怎么才能得到   第三个​​中第二个p的数据   div[@class="vitem"]或p 直接跟随<{em> p[@class="label"]

语义上相同的XPath / XQuery表达式是:

/div
   /div[@class='vitem'][3]
      /p[2]

或者

/div
   /div[@class='vitem'][3]
      /p[@class='label']
         /following-sibling::p[1]