XPath get attribute value in PHP

68,824

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.

Share:
68,824
jerrymouse
Author by

jerrymouse

Updated on August 31, 2020

Comments

  • jerrymouse
    jerrymouse almost 4 years

    Possible Duplicate:
    How to extract a node attribute from XML using PHP's DOM Parser

    How 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
    Gordon over 12 years
    just closevote please. its a duplicate
  • Khurshid Alam
    Khurshid Alam over 7 years
    Doesn't work. error Undefined property: DOMNodeList::$value
  • TomoMiha
    TomoMiha about 7 years
    this works for me:$res = $xpath->query("//input[@name]/@name"); echo $res->item(0)->nodeValue;
  • Peter Krauss
    Peter Krauss almost 7 years
    The simplest way is using evaluate, see stackoverflow.com/a/45010743/287948