Это мой xml-файл:
<?xml version="1.0" encoding="utf-8" ?> <documentElement> <rows> <row> <column>1</column> <column>David</column> <column>Johnson</column> </row> <row> <column>2</column> <column>Jack</column> <column>Nixon</column> </row> </rows> </documentElement>
Я хочу перебрать строки и добавить их в массив. Я передал его в simplexml
а затем simplexml
эти объекты, но не смог:
$xml->rows $xml->rows->row $xml->row $xml->column
Что мне делать?
Благодарю.
На самом деле это один из наиболее простых примеров:
$sxml = simplexml_load_string($xml); foreach($sxml->rows->row as $name => $row) { echo $name, ': ', var_dump($row); }
Что даст вам следующий результат:
row: object(SimpleXMLElement)#3 (1) { ["column"]=> array(3) { [0]=> string(1) "1" [1]=> string(5) "David" [2]=> string(7) "Johnson" } } row: object(SimpleXMLElement)#5 (1) { ["column"]=> array(3) { [0]=> string(1) "2" [1]=> string(4) "Jack" [2]=> string(5) "Nixon" }
Вы можете найти онлайн-демо: http://codepad.org/CYyQhvnM
Вы действительно должны взглянуть на раздел простых примеров в руководстве, в нем есть некоторые очень проницательные примеры, которые объясняются более подробно, чем здесь:
Я надеюсь, что ответ будет полезен в любом случае. Связанные вопросы:
Вы также можете перевернуть простой xml в массив, если вы больше привыкли к массиву: s
<?php $xml = simplexml_load_file('./your.xml'); $json = json_encode($xml); $array = json_decode($json,TRUE); print_r($array); /** *Array ( [rows] => Array ( [row] => Array ( [0] => Array ( [column] => Array ( [0] => 1 [1] => David [2] => Johnson ) ) [1] => Array ( [column] => Array ( [0] => 2 [1] => Jack [2] => Nixon ) ) ) ) ) */ foreach($array['rows']['row'] as $row){ echo 'Id:'.$row['column'][0], ' Firstname:'.$row['column'][1], ' Lastname:'.$row['column'][2].'<br />'.PHP_EOL; } /*Result Id:1 Firstname:David Lastname:Johnson<br /> Id:2 Firstname:Jack Lastname:Nixon<br /> */ ?>
Или еще более чистый пример хакры
<?php $xml = simplexml_load_file('./test.xml'); $rows = json_decode(json_encode(iterator_to_array($xml->rows->row, 0)), 1); print_r($rows); /** * Array ( [0] => Array ( [column] => Array ( [0] => 1 [1] => David [2] => Johnson ) ) [1] => Array ( [column] => Array ( [0] => 2 [1] => Jack [2] => Nixon ) ) ) */ foreach($rows as $row){ echo 'Id:'.$row['column'][0], ' Firstname:'.$row['column'][1], ' Lastname:'.$row['column'][2].'<br />'.PHP_EOL; }
Попробуйте $xml->rows[0]->row[0]
Если вы просто хотите прокручивать строки:
<?php $xmlstr = <<<XML <?xml version="1.0" encoding="utf-8" ?> <documentElement> <rows> <row> <column>1</column> <column>David</column> <column>Johnson</column> </row> <row> <column>2</column> <column>Jack</column> <column>Nixon</column> </row> </rows> </documentElement> XML; $element = new SimpleXMLElement($xmlstr); foreach($element->rows->row as $row) { foreach($row as $column) { echo "{$column}<br>"; } echo "<hr>"; } ?>
$sxml = simplexml_load_string($xml); $newArray = array(); foreach($sxml->rows as $num => $row){ foreach($row as $el){ (array)$newArray[] = (array)$el; } } var_dump($newArray);