Limits to XPath implementaiton in PHP5

Do you have a question? Post it now! No Registration Necessary.  Now with pictures!

Threaded View
Poking around with XPath using SimpleXML, it looks like there are at
least a few reasonably common XPath operators and predicates that
aren't supported. I'd like to check my observations against other
people's experience, and find out if I'm missing something.

Here's what it looks like to me in PHP 5.2.0:

* the count() predicate seems to fail quietly (no error or warning,
you just receive a false value from the xpath method rather than an
* the "|" (union) operator seems to also fail quietly by returning an
empty array
* the "union" operator seems to cause an error
* the "intersect" operator also causes an error (and needless to say,
with | and count() not working, using something like the Kaysian
technique to get the intersection won't work)

Does this accurately capture the current state of things?

If so, are the bulk of developers simply not using these features, or
are they instead writing around the missing features in PHP rather
than trying to get XPath to do the work?

Or is there a better option?

Re: Limits to XPath implementaiton in PHP5

Weston wrote:
Quoted text here. Click to load it

AFAIK, the various PHP API's (SimpleXML, DOM) use libxml as a backend,  
without much logic in between.  So if the XPath operators are supported  
by libxml, they ought to be supported by PHP.  If they're not supported  
by libxml, that would really surprise me.

That said, try using the DOM API instead of SimpleXML and see if you  
have better results.  Then, try peeking into the libxml error stack  
directly using the libxml functions:


Re: Limits to XPath implementaiton in PHP5

Quoted text here. Click to load it

There are indeed some different results. Here's a basic rundown:

count() predicate: succesful under DOM, fails quietly under SimpleXML
"|" (union) operator: succesful under DOM, not sure under SimpleXML
"union" operator: fails with error under both
"intersect" operator: fails with error under both
kaysian intersection technique: succesful under DOM, fails under

Quoted text here. Click to load it

I'll have to poke at that further, but at this point it does look like
both APIs can't simply be handing off to libxml.

Site Timeline