2010-12-17 100 views
3

我无法找到良好的XQuery教程,基本上我所要做的是从这个网站节点retreive文本etc...XQuery中选择n个子/选择下一个元素

<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> 

我想知道我怎么能获取数据了第二p的在第三div[@class="vitem"]
或者p 直接跟随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...,只知道它遵循与类标签AP知道包含文字WEB:?它不再在div [3]/p [2]

谢谢!

+0

好问题,+1。查看我的答案,了解两个XPath表达式,可以精确选择想要的节点。另外,我用简单的英语解释这些表达方式中的每一个。 – 2010-12-17 15:30:33

回答

3

我想知道我怎么可以得到 数据从第二P的第三 的div [@类= “VITEM”]

使用

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

这意味着:让所有的第二p孩子都div元素的第三文本节点孩子s,它具有值为"vitem"的属性class并且是顶层元素的子元素。

或者P直接跟随 P [@类= “标签”]与Web数据:

使用

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

这意味着:让所有的第一个跟随兄弟的p的任何p元素的文本节点孩子class属性的值为"label",这是第三个孩子所有div元素的属性值为class,值为"vitem",并且是顶层元素的子元素。

UPDATE:该OP又增加了第二个问题:他希望只是为了选择具有作为字符串值的文本p“等等......”

使用

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

很酷,这些例子都很好,但是我的意思是直接跟着包含文本WEB的p [@ class =“label”],如果我不知道“WEB:在'div [@ class ='vitem'] [3]',我只知道应该有一个地方包含文字WEB: – Moak 2010-12-18 03:06:32

+0

@Moak:然后更新你的问题。在XPath中有一个严格的术语,以便人们可以相互理解。 – 2010-12-18 03:32:42

+0

我确实更新了我的问题,我不确定我错误地使用了哪些术语,无论如何道歉。我需要从包含文本()的div中选择'/ following-sibling :: p [1]/text()':见我的更新。谢谢! – Moak 2010-12-18 07:30:35

1

我想知道我怎么可以得到 数据从第二P的在第三 div[@class="vitem"]或者P 直接跟随p[@class="label"]

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

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

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