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 - это не должно иметь значения для моего вопроса, но если вы хотите предложить хороший/лучший способ сделать это, я все уши.

2 ответов


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

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

так:

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

и если object не является корнем вашего документа, используйте .


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

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>