2010-12-17 133 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]