Steve Chambers Steve Chambers - 10 months ago 54
PHP Question

What is the difference between DOMXPath::evaluate and DOMXPath::query?

Trying to decide which is more appropriate for my use case...

After comparing the documentation for these methods, my vague understanding is

returns a typed result but
doesn't. Furthermore, the
example includes looping through many results but the
example assumes a single typed result.

Still not much the wiser! Could anyone explain (in as close as possible to layman's terms) when you would use one or the other - e.g. will the multiple/single results mentioned above always be the case?

Answer Source

DOMXPath::query() supports only expressions that return a node list. DOMXPath::evaluate() supports all valid expressions. The official method is named evaluate(), too:

Select all p elements inside a div: //div//p

Select all href attributes in a elements the current document: //a/@href

You can use the string() function to cast the first element of a node list to a string. This will not work with DOMXpath::query().

Select the title text of a document: string(/html/head/title)

There are other function and operators that will change the result type of an expression. But it is always unambiguous. You will always know what type the result is.