Take the 2-minute tour ×

In an XML document, I have elements which share the same name, but the value of an attribute defines what type of data it is, and I want to select all of those elements which have a certain value from the document. Do I need to use XPath (and if so, could you suggest the right syntax) or is there a more elegant solution?

Here's some example XML:

  <data type="me">myname</data>
  <data type="you">yourname</data>
  <data type="me">myothername</data>

And I want to select the contents of all <data> tags children of <object> who's type is me.

PS - I'm trying to interface with the Netflix API using PHP - this shouldn't matter for my question, but if you want to suggest a good/better way to do so, I'm all ears.

share|improve this question
X-Ref: Implementing condition in XPath –  hakre Jul 9 '13 at 9:43
add comment

2 Answers

up vote 16 down vote accepted

Try this XPath:



$myDataObjects = $simplexml->xpath('/object/data[@type="me"]');

And if object is not the root of your document, use //object/data[@type="me"] instead.

share|improve this answer
add comment

I just made a function to do this for me; it only grabs the first result though. Your mileage may vary.

function query_attribute($xmlNode, $attr_name, $attr_value) {
  foreach($xmlNode as $node) { 
    switch($node[$attr_name]) {
      case $attr_value:
        return $node;


echo query_attribute($MySimpleXmlNode->Customer, "type", "human")->Name;

(For the XML below)

<Root><Customer type="human"><Name>Sam Jones</name></Customer></Root>
share|improve this answer
Why not use the XPath Gumbo suggested? And why use a switch instead of the easier to read if($node[$attr_name] == $attr_value)? –  dimo414 May 29 '12 at 15:34
add comment

Your Answer


