Toby
Toby

Reputation: 8792

Using PHP simpleXML to find a node I know the name of but not where it resides

I need to query an XML string in PHP were I know the names of the nodes I am looking for but I might not necessarily know the path to the node.

I think I can do this with xpath but I can't work out how to set up a relative path to look anywhere in the document, could someone point me in the right direction.

I am currently trying to acheive this with simpleXML, but if there is a better way of doing this I would love to hear it.

Upvotes: 1

Views: 19528

Answers (3)

goat
goat

Reputation: 31854

While I think using simplexml's xpath is really easy and effective for this, in case you have more to do, you might find some of these alternatives more familiar to you, as they use the dom, or css selectors instead of xpath.

http://code.google.com/p/phpquery/

http://querypath.org/

http://www.php.net/manual/en/domelement.getelementsbytagname.php

Upvotes: 1

Francis Avila
Francis Avila

Reputation: 31651

Don't use regexes to parse XML!

The descendant (double-slash) operator in xpath will search all descendants for a match.

$matches = $simplexmlelementobject->xpath('//nameOfElement');

The above is equivalent to the DOM method getElementsByTagName

If you have a general idea of where the element lives, you can use the descendant operator to search below a certain node:

$matches = $simplexmlelementobject->xpath('someparentelement[@conditionalattr=something]//nameOfDescendantElementYouWant');

If you need to use DOMDocument instead of SimpleXML, you can issue xpath instructions with the DOMXPath object if necessary. (Left as an exercise for the reader.)

Upvotes: 11

Robert Van Sant
Robert Van Sant

Reputation: 1507

i am not sure exactly what the XML structure looks like but i've used this blog post to help out with some issues i've run into with XML parsing. it appears to explain the basics, plus always refer to php.net

i hope this helps, but without seeing the full issue, i can't fully answer the question.

Upvotes: -1

Related Questions