2014-01-29 40 views
0

我有一個XPath查詢:獲取所有的HREF從特定的XPath查詢

$q = $xpath->query("//p[@id='v{$versenumber}']/following-sibling::div[@class='admonition']"); 

工作正常,很好的事實。我已經使用下列從中提取我收到HTML:

$saveHTML = $dom->saveHTML($q->item(0));

然而,這裏面查詢我有,我想用別的東西來代替的HREF。我無法真正識別hrefs。我想有另一個查詢是相同的,但最後/a,但沒有返回任何東西。

我本來以爲我可以像這樣訪問他們:

$x = $q->item(0)->getElementByTagName('a');

但這似乎沒有工作,要麼:(我究竟做錯了

更新

? HTML我想分析:

<p id="v1"><span class="verseref">1</span></p> 
<div class="notes"> 
<p class="first">Notes</p> 
<p class="last">Paragraph</p> 
</div> 
<div class="admonition"> 
<p class="last">HTML with <a href='foobar'>inside it</a>. I want to get all href attributes from here.</p> 
</div> 

並使用上述查詢,我​​可以很好地獲取文本,這只是我想處理每個'href'屬性,因爲它們是錯誤的,我需要更改它們。所以我分別處理每個<div class'admonition'>以及其中的所有hrefs。

但是使用:

$q = $xpath->query("//p[@id='v{$versenumber}']/following-sibling::div[@class='admonition']//a/@href");

我似乎得到了巨大的HREF的數量爲一個段落,其中只有一個。

../../ga/ch1/#v1 
#v6 
#v5 
#v6 
../../mr/ch16/#v20 
../ch12/ 
../../heb/ch13/#v9 
../ch12/ 
../ch3/#v1 
../../lu/ch1/#v6 
../../1jo/ch1/#v8 
../../1jo/ch1/#v10 
../../1jo/ch1/#v7 
../../1jo/ch1/#v9 
#v1 
../../eph/ch4/#v13 
../../ro/ch14/ 
../../ro/ch14/#v1 
../ch5/ 
../ch6/ 
../ch7/ 
../ch8/ 
../ch11/ 
../ch12/ 
../ch15/ 
../../ro/ch14/ 
#v12 
../ch3/#v4 
../ch15/#v24 
../../eph/ch5/#v17 
../../ro/ch8/#v6 
../../../ot/ge/ch11/#v3 
../../../ot/ps/ch133/ 
../../../ot/jer/ch32/#v39 
../../ac/ch4/#v32 
../../ro/ch12/#v16 
../../ro/ch15/#v5 
../../php/ch1/#v27 
../../php/ch2/#v1 
../../1th/ch5/#v13 
../../jas/ch3/#v13 
../../1pe/ch3/#v8 
../../eph/ch4/#v13 
../ch16/#v15 
../ch16/#v17 
../ch16/#v24 
../../ac/ch18/#v12 
../ch16/#v15 
../ch16/#v17 
../../ac/ch11/#v18 
../../mt/ch28/#v19 
../../mt/ch26/#v2 
../ch2/#v14 
../../ro/ch1/#v16 
../../ro/ch1/#v16 
../../2co/ch4/#v3 
#v17 
../../ac/ch20/#v30 
#v18 
../../../ot/isa/ch29/#v14 
../../../ot/isa/ch29/#v14 
../../../ot/isa/ch29/#v13 
../ch2/#v14 
../../ro/ch10/#v10 
#v21 
#v26 
../ch2/ 
#v18 
#v11 
../../lu/ch6/#v38 
../../../ot/ps/ch14/#v1 
../../../ot/ps/ch53/#v1 
../../col/ch2/#v3 
#v23 
#v18 
../../ac/ch5/#v34 
../../ac/ch26/#v24 
../../ga/ch2/#v1 
#v26 
#v25 
../../ac/ch24/#v25 
../../2co/ch10/#v12 
../../ro/ch7/#v18 
#v30 
../../ro/ch7/#v18 
../../joh/ch8/#v44 
../../mt/ch26/#v41 
../../ro/ch8/#v18 
#v26 
../../../ot/isa/ch42/#v8 
../../joh/ch3/#v3 
../../../ot/pr/ch3/#v6 
../../ro/ch8/#v23 
#v26 

..哪一定是整個文檔,否則我不知道它從哪裏得到所有這些hrefs。

+0

您能否提供您正在嘗試解析的HTML代碼片段?就像'// p [@ id ='v {$ versenumber}']/following-sibling :: div [@ class ='admonition'] // a/@ href'不會選擇您要查找的內容? – Robin

+0

我剛剛嘗試過。我得到的值,但多個值應該只有一個文本塊中的一個href。似乎它可能會引用整個文檔或者其他的內容? – Chud37

+1

'following-sibling :: div [@ class ='admonition']'會選擇所有跟隨div的類,而不是類似於'admonition'的類,而不僅僅是下一個div。我想你已經知道了,但在這裏很難得到確切的想法。你能否提供你想要解析的部分內容,以及解決方案的輸出和你想要的內容? – Robin

回答

1

following-sibling是一個軸,而不是選擇器,它只是指定通過DOM導航的模式。你的following-sibling::div[@class='admonition']要求全部「告誡」div s跟隨(在任何距離)所選的pposition()函數應該可以幫助你解決這個問題。嘗試類似following-sibling::div[@class='admonition' and position()=1]

+0

啊!這將有意義的看到,因爲我只有參考' - >項目(0)'。我會試試這個! – Chud37

+0

天才!非常感謝。它工作得很好。 – Chud37

0

$a_tags = $xpath->query('.//a', $q->item(0));