2011-06-27 60 views
5

如何從xpath中使用節點獲取文本?Php和Xpath - 如何從節點內部獲取文本

現在我在做這樣的:

$temp= $content->xpath('qwe/qwe'); 
$temp = each($temp[0]); 
return $temp['value']; 

但你可以看到它遠遠很好的解決辦法:(

在C#中它是那麼容易,因爲

public string readXmlVar(string xpath) 
{ 
    XmlNode xmlNode = xml.SelectSingleNode(xpath); 
    return xmlNode.InnerText; 
} 
+1

只投它作爲一個字符串:'回報(字符串)$溫度;' – prodigitalson

+0

HM,即作品:)爲什麼你沒有寫出適當的答覆?我會加上你,並選擇你的答案:) – NewProger

+0

php有時候可能會是這樣一種瘋狂的語言...你永遠不知道在某些情況下做什麼... – NewProger

回答

7

對於SimleXmlElement只是將其強制轉換爲字符串:return (string) $temp;。對於DomDocument使用return $temp->nodeValue

+2

一個必須小心thoguh,'DomDocument'使用'$ temp-> nodeValue'將返回給定節點下的所有孩子的文本內容包括兒童的孩子)。 – Yoshi

6

Try:

$dom = new DOMDocument; 
$dom->loadXML('<root> 
    <p>some text<br />some more text</p> 
</root>'); 

$xpath = new DOMXPath($dom); 
foreach ($xpath->query('/root/p/text()') as $textNode) { 
    echo $textNode->nodeValue; 
} 

$textNode將是DOMText

+0

使用foreach更糟糕... – NewProger

+0

@Lurler爲什麼?如果你想要所有的文本內容,只需收集節點值。這是簡單的DOM遍歷,它甚至沒有PHP的具體。 – Yoshi

+0

因爲它創建了變量的副本,然後迭代它。這完全是無效的。 – NewProger

2
(string) current($xml->xpath("//group[@ref='HS_TYP']")) 

希望幫助

+0

好得多。一個簡單而完整的單線解決方案來解決一個簡單的問題。 – meustrus

1

這將讓從簡單的XML元素的所有內部文本

dom_import_simplexml($xpath->query('//div[@class="h1"]')->textContent;