Just trying to figure a shorter way to do this:
I'm using simpleXMLElement to parse an xml file and it's aggravating to have to call two lines to process an array when I know what node I want.
Current code:
$xml = new SimpleXMLElement($data);
$r = $xml->xpath('///givexNumber');
$result["cardNum"] = $r[0];
What I would like to do would be something like I can do with DomX
$result["cardNum"] = $xml->xpath('///givexNumber')->item(0)->nodeValue;
In PHP < 5.4 (which supports array dereference the result of a function or method call) you can access the first element either with the help of list
:
list($result["cardNum"]) = $xml->xpath('//givexNumber');
Since PHP 5.4 it's more straight forward with:
$result["cardNum"] = $xml->xpath('//givexNumber')[0];
Take care that these only work without any notices if the xpath method returns an array with at least one element. If you're not sure about that and you need a default value this can be achieved by using the array union operator.
In PHP < 5.4 the code that has the default return value of NULL
would be:
list($result["cardNum"]) = $xml->xpath('//givexNumber[1]') + array(NULL);
For PHP 5.4+ it's similar, here a benefit is the new array syntax just with square brackets:
list($result["cardNum"]) = $xml->xpath('//givexNumber[1]') + [NULL];
See as well:
Note in the margin: Because you only expect one element, you should not return more than one by the xpath already:
$result["cardNum"] = $xml->xpath('//givexNumber[1]')[0]; ###
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With