解析XML:获取每个父节点的子节点

时间:2015-02-15 21:49:25

标签: php xml parsing nodes treenode

我尝试了很多不同的解决方案,但我只是新的...

我有一个像这样的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 

有可能吗? 真的,谢谢你。

1 个答案:

答案 0 :(得分:1)

您可以使用DOMDocument类来解析xml需要有效的xml, notice

// 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 />';
}

要从您可以使用DOMDocument::load()

的文件加载xml数据

更简单的方法是使用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>