2016-03-31 27 views
1

我正在使用Crawler庫來幫助您製作一些XPath表達式來獲取HTML標記的內容。我目前正在閱讀頁面中的HTML5內容,並且想要以這種方式檢索未插入到標記中的文本。如何使用XPath在另一個子元素之後選擇子文本

<div class="country"> 
    <strong> USA </strong> 
     Some text here 
</div> 

所以我想在這裏得到這個文本一些文本,但履帶庫允許得到的只是什麼是在一個標籤,而不是外面。

所以任何替代請。

這是履帶部分:

$crawler = new Crawler(); 
$crawler->xpathSingle($xml, '//div[@class="country"]/strong/@text'); 
+1

如果你嘗試這個XPath會發生什麼:'// div [@ class =「country」]/strong/following-sibling :: text()'?問,因爲我不熟悉這個「Crawler」庫 - 我知道這個XPath在Python中使用lxml工作,例如。 –

+0

謝謝老兄,它工作。但是,即使該文本屬於另一個標籤,它仍會獲取強標記之後的所有文本 – KubiRoazhon

回答

1

無論這些XPath將返回"Some text here"的要求:

  • normalize-space(substring-after(//div[@class="country"], 'USA'))

  • normalize-space(//div[@class="country"]/strong/following-sibling::text())

根據您希望適應的種類進行選擇。

信用:第二個例子是從建議通過@Keith Hallcomment首次提出的。


更新

正如我所說,你需要根據你想以適應變化,以選擇您的XPath。沒有快沒有我後比你遇到了一個變化:

<div class="country"> 
    <strong> USA </strong> 
     Some text here 
    <i>Do not want this text</i> 
</div> 

您可以排除"Do not want this text"並返回"Some text here"作爲使用上述第二個XPath請求,但只是搶了先上後下的文本節點:

  • normalize-space(//div[@class="country"]/strong/following-sibling::text()[1])
+0

這是第二個標記。第一個返回'美國'。感謝兄弟的幫助 – KubiRoazhon

+0

但是,即使這個文本屬於另一個標籤,它仍會獲得強標記後的所有文本 – KubiRoazhon

+0

很高興第二個幫助,但請注意第一個不會返回'「USA」';它會按照要求返回「這裏有一些文字」。關於'strong'後面的文本太多,你的例子沒有顯示這種情況,但是你可以通過'[0]'來獲取第一個文本節點,以適應第二個XPath。我可以爲你更新答案,向你展示...... – kjhughes

相關問題