Marcos Calafat
Marcos Calafat

Reputation: 21

Get value from xml using the attribute with xpath in php

I want to get the value '23452345235' of the parameter with name="userID" from this :

<?xml version="1.0" encoding="UTF-8"?>
    <callout>
        <parameter name="UserID">
            23452345235
        </parameter>

        <parameter name="AccountID">
            57674567567
        </parameter>

        <parameter name="NewUserID">
            54745674566
        </parameter>

     </callout>

I'm using this code:

$xml = simplexml_load_string($data);
$myDataObject = $xml->xpath('//parameter[@name="UserID"]');
var_dump($myDataObject);

And I'm getting this:

array(1) {
[0] =>
    class SimpleXMLElement#174 (1) {
        public $@attributes =>
        array(1) {
          'name' =>
          string(6) "UserID"
        }
    }
}

I actually want to get the value of '23452345235' or receive the parameter in order to get this value.

What I'm doing wrong?

Upvotes: 2

Views: 88

Answers (2)

Kevin
Kevin

Reputation: 41893

Well you can (optionally) put it under a loop. Like this:

$myDataObject = $xml->xpath('//parameter[@name="UserID"]');
foreach($myDataObject as $element) {
    echo $element;
}

Or directly:

echo $myDataObject[0];

Actually is quite straightforward, as seen on your var_dump(), its an array, so access it as such.

Upvotes: 3

ThW
ThW

Reputation: 19512

SimpleXMLElement::xpath() can only return an array of SimpleXMLElement objects, so it generates an element and attaches the fetched attribute to it.

DOMXpath::evaluate() can return scalar values from Xpath expressions:

$dom = new DOMDocument();
$dom->loadXml($xml);
$xpath = new DOMXpath($dom);

var_dump($xpath->evaluate('normalize-space(//parameter[@name="UserID"])'));

Output:

string(11) "23452345235"

Upvotes: 1

Related Questions