Разбор XML: получить дочерние узлы для каждого родительского узла.

Я пробовал много разных решений, но я просто новичок в этом ..

У меня есть дерево XML, как это:

<book>
<author> First author </author>
<title> aaaa </title>
<price> 111 </price>
</book>
<book>
<author> Second author </author>
<title> bbbb </title>
<price> 222 </price>
</book>
<book>
<author> Third author </author>
<title> cccc </title>
<price> 333 </price>
</book>`

Мне нужно разобрать его в моем PHP-код, чтобы получить таблицу, такую ​​как

First author,
aaaa,
111

Second author,
bbbb,
222

Third author,
cccc,
333

Является ли это возможным?
Большое спасибо.

2

Решение

Вы могли бы использовать DOMDocument класс для разбора вашего xml, уведомление что XML должен быть действительным:

// create a DOMDocument object and load your xml data
$doc = new DOMDocument();
$doc->loadXML($xmlString);

// get all book sections
$books = $doc->getElementsByTagName('book');

// loop through each item and display information
foreach($books as $book) {
print $book->getElementsByTagName('author')->item(0)->nodeValue.',<br />';
print $book->getElementsByTagName('title')->item(0)->nodeValue.',<br />';
print $book->getElementsByTagName('price')->item(0)->nodeValue.'<br /><br />';
}

Чтобы загрузить данные XML из файла вы можете использовать DOMDocument::load()

Более простой способ сделать то же самое будет использовать SimpleXML:

// create a SimpleXMLElement
$xmlDoc = simplexml_load_string($xmlString);

// get all children of the first element
$books = $xmlDoc->children();

// loop through each item and display information
foreach($books as $book) {
print $book->author.',<br />';
print $book->title.',<br />';
print $book->price.'<br /><br />';
}

Обратите внимание, что второй пример будет работать только в том случае, если ваш xml считается правильно сформированным, вы можете перенести текущую разметку между <books></books>:

<books>
<book>
<author> First author </author>
<title> aaaa </title>
<price> 111 </price>
</book>
...
</books>
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]