XPath get attribute value in PHP
Solution 1
XPath can do the job of getting the value attribute with $xpath->query("//input[@name='text1']/@value");
. Then you can iterate over the node list of attribute nodes and access the $value
property of each attribute node.
Solution 2
Look at this DOM method: http://www.php.net/manual/en/domelement.getattribute.php
$array_result = array();
foreach (filtered as $key => $value) {
$array_result[] = $value->getAttribute('ID');
}
Solution 3
I'm not familiar with the PHP syntax for this, but to select the value attribute you would use the following xpath:
//input[@name='text1']/@value
However xpath doesn't return strings, it returns nodes. You want the nodeValue
of the node, so if PHP follows convention, that code would be:
$xpath->query("//input[@name='text1']/@value")->item(0).nodeValue;
For learning purposes, keep in mind you always check the nodeValue
property. So if you wanted the name of the same element, you'd use:
$xpath->query("//input[@name]/@name")->item(0).nodeValue;
You'd probably like to make sure the query returns a non-null value before querying the nodeValue
property as well.
jerrymouse
Updated on August 31, 2020Comments
-
jerrymouse almost 4 years
Possible Duplicate:
How to extract a node attribute from XML using PHP's DOM ParserHow do I extract an HTML tag value?
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']");
How do I get
value
to be "need to get this"?Update:
I got it working and hope it will help others too. After above code I got the value by:
echo $filtered->item(0)->getAttribute('value');
-
Gordon over 12 yearsjust closevote please. its a duplicate
-
Khurshid Alam over 7 yearsDoesn't work. error
Undefined property: DOMNodeList::$value
-
TomoMiha about 7 yearsthis works for me:$res = $xpath->query("//input[@name]/@name"); echo $res->item(0)->nodeValue;
-
Peter Krauss almost 7 yearsThe simplest way is using
evaluate
, see stackoverflow.com/a/45010743/287948