SimpleXML: выбор элементов, имеющих определенное значение атрибута

В XML-документе у меня есть элементы, которые имеют одно и то же имя, но значение атрибута определяет, какой тип данных он есть, и я хочу выбрать все те элементы, которые имеют определенное значение из документа. Нужно ли использовать XPath (и если да, можете ли вы предложить правильный синтаксис) или есть более элегантное решение?

Вот пример XML:

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

И я хочу выбрать содержимое всех тегов <data> тегов <object> которые являются типом me .

PS – Я пытаюсь взаимодействовать с API Netflix с помощью PHP – это не имеет значения для моего вопроса, но если вы хотите предложить хороший / лучший способ сделать это, я все уши.

Related of "SimpleXML: выбор элементов, имеющих определенное значение атрибута"

Попробуйте этот XPath:

 /object/data[@type="me"] 

Так:

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

И если object не является корнем вашего документа, вместо этого используйте //object/data[@type="me"] .

Я только сделал функцию, чтобы сделать это для меня; однако он захватывает только первый результат. Ваш пробег может отличаться.

 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; 

(Для XML ниже)

 <Root><Customer type="human"><Name>Sam Jones</name></Customer></Root>