Поиск узла в XML-документе по значению его атрибута

#php #xml

#php #xml

Вопрос:

Я пытаюсь получить значение из XML-канала, но я не уверен, как его получить. Поток:

  <name>
    <namerecord nameID="0" platformID="1" platEncID="0" langID="0x0">
      Hello World
    </namerecord>
    <namerecord nameID="1" platformID="1" platEncID="0" langID="0x0">
      MyName
    </namerecord>
    <namerecord nameID="6" platformID="1" platEncID="0" langID="0x0">
      Another Record
    </namerecord>
    <namerecord nameID="12" platformID="1" platEncID="0" langID="0x0">
      Another Record Again
    </namerecord>
  

Я пытаюсь извлечь элементы из этого, указав, каково значение NameID. Если я нацеливаю его просто как namerecord [0], это неверно в том смысле, в каком мне это нужно.

Я пробовал множество вещей, таких как:

 $test = $xml->name->namerecord->attributes('nameId, '12');
  

Есть предложения?

Ответ №1:

Вот как вы теперь обрабатываете XML:

 $dom = new DOM();
$dom->load('your xml here');

$xp = new XPath($dom);

$node = $xp->query('//namerecord[@nameID=12]')->item(0);

$nameID = $node->getAttribute('nameID');
  

Комментарии:

1. Не уверен, что это за класс DOM (), и он не работает в php5. Я думал, что SimpleXML — лучший способ работы с XML в php?

2. php.net/dom возможно, он не включен в вашей установке или поставляется отдельным пакетом. SimpleXML — это нормально, но думайте о нем как о «DOM-lite»