Я использую 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']
. Спасибо за любую помощь.
Элементами вашего массива являются объекты 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