SimpleXML和xpath获取节点的值

时间:2016-06-15 14:33:53

标签: php xpath simplexml

我有以下notes.xml XML文件。

<?xml version="1.0" encoding="UTF-8"?>
<note>
    <to>Tove</to>
    <from>Jani</from>
    <heading>Reminder</heading>
    <body>Don't forget me this weekend!</body>
</note>

这个PHP脚本

<?php
    $xml = simplexml_load_file('notes.xml');
    $result = $xml->xpath('//to');
    print_r($result);
    echo "<br>";
    echo $result;
?> 

然后,为什么输出如下? (没有价值)

Array ( [0] => SimpleXMLElement Object ( ) )
Array 

2 个答案:

答案 0 :(得分:2)

看看the manual for the SimpleXMLElement::xpath method。它始终返回零个或多个SimpleXMLElement个对象的数组。

如果您echo数组 - 任何数组 - 您都会得到Array这个词。

如果您echo SimpleXMLElement个对象,它会自动转换为字符串(就像您用echo (string)$foo代替echo $foo一样,如图所示在the basic SimpleXML examples

所以你需要查看数组中,获取SimpleXMLElement对象,并回显它。请记住,如果未找到匹配项,则数组将为空。

答案 1 :(得分:1)

$result = $xml->xpath('//to');

这会返回一组SimpleXMLElement个对象,因为XML中可能有多个<to>标记。要提取文本,您应该使用

echo (string) $result[0];

转换为字符串会返回标记中的文本内容。

如果您的XML总是那么简单,您也可以使用

$result = (string) $xml->to;