2011-11-06 88 views
25

可能重複:
How to extract a node attribute from XML using PHP's DOM Parser的XPath取屬性值

我如何提取的HTML標籤的價值?

HTML:

<input type="hidden" name="text1" id="text1" value="need to get this"> 

PHP:

$homepage = file_get_contents('http://www.example.com'); 
$doc = new DOMDocument; 
$doc->preserveWhiteSpace = false; 
@$doc->loadHTML($homepage); 
$xpath = new DOMXpath($doc); 
$filtered = $xpath->query("//input[@name='text1']"); 

我怎麼value「需要得到這個」

更新:

我得到它的工作,並希望這將幫助其他人了。上面的代碼後,我通過了值:

echo $filtered->item(0)->getAttribute('value'); 
+0

您必須通過foreach($ filtered as $ element){...}來遍歷您的過濾元素'$ filtered'並自己檢查節點值/屬性。 – Smamatti

+5

一種選擇是使用較少的'evaluate()'方法,它將返回文本或空字符串:'$ xpath-> evaluate('string(// input [@ name =「text1」]/@ value) ');' – salathe

+4

這不是真正的另一個問題的重複。這是一個真正的跨環境xpath解決方案,另一個是php特定的。 –

回答

34

XPath可以完成獲取值屬性$xpath->query("//input[@name='text1']/@value");的工作。然後,您可以迭代屬性節點的節點列表並訪問每個屬性節點的$value屬性。

+2

只需closevote。它是一個副本 – Gordon

7

我不熟悉這個PHP語法,而是選擇屬性值你會請使用以下XPath:

//input[@name='text1']/@value 

但是XPath不返回字符串,它返回節點。希望節點的value,所以如果PHP如下約定,代碼如下:

$xpath->query("//input[@name='text1']/@value")->value; 

爲了便於學習,牢記您經常檢查value屬性。所以,如果你想在同一元素的名稱,你會使用:

$xpath->query("//input[@name]/@name")->value; 

你可能會想,以確保查詢查詢value財產以及前返回一個非空值。

+0

不起作用。錯誤'未定義的屬性:DOMNodeList :: $ value' –

+1

這適用於我:$ res = $ xpath-> query(「// input [@name]/@ name」); echo $ res-> item(0) - > nodeValue; – TomoMiha

+0

最簡單的方法是使用'評估',請參閱https://stackoverflow.com/a/45010743/287948 –