Dom and SimpleXml Xpath return types

[email protected] (Philip Fletcher) Wed, 03 Mar 2004 17:00:44 +0000
Newsgroups php.xml.dev
Organization Stutchbury
Message-ID <[email protected]>
I obviously have too much time on my hands today...

From my understanding of the XPath spec, there should be four return types:
NodeSet, number, string or boolean. Using either Dom or SimpleXml I don't
seem to be able to get anything except a NodeSet (either an object or an
array respectively).

Example: (Please enlighten me if my xpath is as bad as I think it is:)

$xml = '<entity1 name="fred">Some Text<entity2 name="bert" /></entity1>';
$sxml = simplexml_load_string($xml);
$dom = new DomDocument();
$dom->loadXML($xml);
$xpath = new DomXpath($dom);

$xp = '//entity1[1]/@name'; //Should return string 'fred'?
//$xp = 'string(//entity1[1])'; //Should return string 'Some Text'?
//$xp = 'count(//entity1)'; //Should return int 1?

echo 'Simple Result: ' . ( $sxml->xpath($xp) ) . '<br />'; //Returns array
echo 'Dom Result: ' . ( $xpath->query($xp) ) . '<br />'; //Returns object

$sresult = $sxml->xpath($xp);
echo 'Simple Result[0]: ' . $sresult[0] . '<br />';

$dresult = $xpath->query($xp);
echo 'Dom Result[0]: ' . ( $dresult->firstChild->data ) . '<br />';

I don't think all the functions have been implemented yet, although string()
and count() do not error like first() does, yet returns null.

I wouldn't mind if I could do $sxml->xpath($xp)[0] for the simplexml :)

Philip