PHP和XML:需要检索“multidimensional”xml结构中的值,其中标记具有相同的名称

时间:2012-11-01 20:40:21

标签: php xml xpath xml-parsing

我有一个对象,它有一些xml元数据作为名为MetadataXML的属性。我需要获取xml标记内的值并将它们存储在php变量中。我已经在这个xml结构上成功了:

[MetadataXML] =>

"<metadata>

     <title>A title</titel>
     <body>Some text in the body</body>

 </metadata>"

使用此代码:

$meta = simplexml_load_string($object->MetadataXML);

$title = (string)$meta->title;
$body  = (string)$meta->body;

但现在我有一个xml结构,如下所示:

<metadata>

    <two_related_books>

        <book>
            <id>20</id>
            <title>A title</title>
        </book>

        <book>
            <id>55</id>
            <title>Another title</title>
        </book>

    </two_related_books>

</metadata>

我试图以几种不同的方式遍历书籍项目,以某种方式获取每本书的id和title标签内的值。但是在检索任何东西方面都没有成功。我也尝试过使用XPath。

有谁知道怎么做?

2 个答案:

答案 0 :(得分:1)

这样的事情应该有效:

$meta = simplexml_load_string( $object->MetadataXML);
foreach( $meta->two_related_books->book as $book) {
    echo $book->id;
    echo $book->title;
}

答案 1 :(得分:0)

对于这些tash,最好使用DOMDocument和XPath对象。

基础示例:

// Load XML
$dom = new \DOMDocument;
$dom->loadXML($xmlData);

// Create a new XPath object
$domXPath = new \DOMXPath($dom);

$bookItems = $domXpath->evaluate('//book'); // Or "/metadata/two_related_books/book", fot get from root node
// Or
$bookItems = $domDocument->getElementsByTagName('book');

foreach ($bookItems as $item) {
  // Here code for control each item
}