Получить экземпляр узла по имени в SimpleXML (PHP) - PullRequest
0 голосов
/ 13 декабря 2011

Я бы хотел найти узлы с одинаковым именем узла в объекте SimpleXML независимо от того, насколько глубоко они вложены, и создать их экземпляр в виде массива.

В HTML DOM я могу сделать это с помощью JavaScript, используя getElementsByTagName(). Есть ли способ сделать это и в PHP?

Ответы [ 3 ]

3 голосов
/ 13 декабря 2011

Да, используйте xpath

$ xml-> xpath ('// div');

Здесь $ xml - это ваш объект SimpleXML.

В этом примере вы будетеполучить массив всех элементов div

1 голос
/ 13 декабря 2011
  $fname = dirname(__FILE__) . '\\xml\\crRoll.xml';  
  $dom = new DOMDocument; 
  $dom->load($fname, LIBXML_DTDLOAD|LIBXML_DTDATTR);
  $root = $dom->documentElement;                     

  $xpath = new DOMXpath($dom);  
  $xpath->registerNamespace('cr', "http://www.w3.org/1999/xhtml"); 
  $candidateNodes = $xpath->query("//cr:break");  

  foreach ($candidateNodes as $child) {
    $max = $child->getAttribute('tstamp');
  }

Находит все узлы BREAK (tstamp attr), используя XPath ...

0 голосов
/ 13 декабря 2011

Только для DOMDocument :: getElementsByTagName ,
однако вы можете импортировать / экспортировать SimpleXML в DOMDocument ,
или просто использовать DOMDocument для анализа XML.

В другом ответе, упоминаемом о Xpath,
будет возвращено дублирование узла, если у вас есть что-то вроде: -

<div><div>1</div></div>
...