Напишите цикл foreach для массива SimpleXMLElements

Я использую XPath в PHP 5 для анализа XML-документа. У меня проблема заключается в написании foreach для правильного отображения следующего массива:

Пример XML-документа

значение 1 значение 2

  $xmlfile = 'link_to_file.xml'; $xmlRaw = file_get_contents($xmlfile); $xml = new SimpleXMLElement($xmlRaw); $install_files = $xml->xpath('//files'); foreach($install_files as $row) { echo $row['file']; } 

// var_dump для $ row дает следующее

  array(1) { [0]=> object(SimpleXMLElement)#21 (2) { ["file"]=> string(12) "value 1" ["folder"]=> string(8) "value 2" } } 

В идеале я хотел бы получить значение с помощью $row['file'] или $row['folder'] . Спасибо за любую помощь.

Related of "Напишите цикл foreach для массива SimpleXMLElements"

Элементами вашего массива являются объекты SimpleXMLElement . Вы можете получить доступ к их свойствам с помощью синтаксиса $object->property . Поэтому попробуйте следующее:

 foreach ($array as $row) { echo $row->folder . $row->file; } 

Если я правильно понимаю ваш пример,

 foreach ($array as $row) { // do something with $row['file'] or $row['folder'] } 

Если вы хотите обработать только один элемент, вам не обязательно нужен цикл, но это тоже не повредит.
В соответствии с вашим выходным file и folder находятся дочерние элементы элемента, возвращаемого для вашего запроса xpath. Вы можете получить к ним доступ через $parentElement->childElement . Если они были атрибутами, вы должны использовать $element['attributeName']

 $foo = new SimpleXMLElement(getData()); foreach( $foo->xpath('row[@id="r2"]') as $row ) { echo $row->file, " | ", $row->folder, "\n"; } echo "-----\n"; // same thing if you have more than one element in your result set foreach( $foo->xpath('row[@id="r2" or @id="r3"]') as $row ) { echo $row->file, " | ", $row->folder, "\n"; } function getData() { return '<foo> <row id="r1"> <file>value 1.1</file> <folder>value 1.2</folder> </row> <row id="r2"> <file>value 2.1</file> <folder>value 2.2</folder> </row> <row id="r3"> <file>value 3.1</file> <folder>value 3.2</folder> </row> </foo>'; } 

печать

 value 2.1 | value 2.2 ----- value 2.1 | value 2.2 value 3.1 | value 3.2