2015-02-15 2 views
1

Я пробовал много разных решений, но я просто новичок в этом ..Анализировать 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>` 

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

First author, 
aaaa, 
111 

Second author, 
bbbb, 
222 

Third author, 
cccc, 
333 

Возможно ли это? Действительно благодарю вас.

+0

Что вы пробовали? Вы посмотрели [SimpleXML] (http://php.net/manual/en/simplexml.examples-basic.php)? – Tom

ответ

0

Вы можете использовать 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()

A более простой способ сделать то же самое будет использовать 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 />'; 
} 

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

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

Спасибо, много что сработало. Я уже пытался использовать DOMDocument, но я что-то упустил. Только один вопрос для моего понимания: переменная $ key - это то, для чего? Я не получаю этот отрывок. –

+0

@Rain_xx - Добро пожаловать, рад, что смогу помочь. – Cyclonecode

+0

Я скорректировал код, чтобы получить больше узлов. Но я действительно не понимаю часть «как $ key», которая отсутствовала в моих других попытках, которые натолкнулись, не удалось. Есть источник, который я могу лучше изучить? –

Смежные вопросы