2012-02-04 71 views
2

標籤我有以下代碼爲XPath查詢...排除基於類和風格的XPath

<div class="buying"> 


<h1 class="parseasinTitle "> 

<span id="btAsinTitle">Top Ten Tips for Growing Your Own Tomatoes (The Basic Art of Italian Cooking) <span style="text-transform: capitalize; font-size: 16px;">[Kindle Edition]</span></span> 


</h1> 
</div> 

我只是想提取

十大技巧自己種西紅柿(意大利烹飪的基本藝術)

所以我用textContent具有以下XPath查詢

$xpath_books->query('//span[@id="btAsinTitle"]') 

但結果是

十大技巧自己種西紅柿(意大利烹飪的基本藝術)的Kindle版]

我想,我必須排除<span style="text-transform: capitalize; font-size: 16px;">,得到我的目的, 我該怎麼辦?

回答

3

使用這個XPath:

//span[@id="btAsinTitle"]/text() 
+2

感謝,它的工作完美... – 2012-02-04 19:19:08

+0

@NewBee,歡迎你! – 2012-02-04 19:19:39

+0

好吧,我知道的是,text()函數用於從節點中提取文本,但我很困惑,爲什麼它在我的情況下工作? [kindle addition]也是一個文本?爲什麼這樣? – 2012-02-04 19:20:29

3

你的XPath不會返回只與ID節點,但由於DOM是連接DOMNodes樹,返回的節點將包含子節點。當您訪問返回的跨度爲nodeValuetextContent時,PHP將返回所有子項的組合DOMText節點,包括持有「Kindle Edition」的子範圍。

 SPAN 
    / \ 
    TEXT SPAN 
      \ 
      TEXT 

更多,在DOMDocument in php

如果你想只獲取第一文本部分,你必須獲取第一childNode的的nodeValue:

echo $result->item(0)->childNodes->item(0)->nodeValue; 

的替代方法獲取該string with XPath will be

echo $xpath->evaluate('string(//span[@id="btAsinTitle"]/text())'); 

請參閱http://php.net/manual/en/domxpath.evaluate.php

如果你想返回整個一個DOMText節點而是使用

//span[@id="btAsinTitle"]/text() 
+1

謝謝@Gordon,你剛剛回答的是我剛纔對自己的要求。 – 2012-02-04 19:23:18

+0

再次感謝,讓我的想法更清楚地表明節點 – 2012-02-04 20:06:38