Steve Chambers Steve Chambers - 1 year ago 80
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
query
doesn't. Furthermore, the
query
example includes looping through many results but the
evaluate
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?

ThW ThW
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: http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathEvaluator

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.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download