simplexml XPath检索属性,而不是文本值

时间:2014-01-06 17:07:13

标签: php xml xpath

我有这个XML:

<root>
    <parent>
        <child id="childAtt">
            <subChild id="subAtt">Value to retrieve</subChild>
        </child>
    </parent>
</root>

我目前正在尝试使用此XPath检索subChild的文本值:

$total = $xml->xpath("/*//child[@id='childAtt']/subChild[@id='subAtt']");

但是,这会返回subChild属性值,而不是节点的文本值。

我想知道如何检索subChild的{​​{1}}的文字值。

3 个答案:

答案 0 :(得分:1)

您只需要访问第一个元素并将其类型化为字符串:

$total = (string) $xml->xpath("/*//child[@id='childAtt']/subChild")[0];
var_dump($total); 

输出:

string(17) "Value to retrieve"

答案 1 :(得分:0)

您还可以尝试使用XPath查询直接提取文本:

$total = (string) $xml->xpath("/*//child[@id='childAtt']/subChild/text()")

答案 2 :(得分:0)

您的查询 选择该元素。只是为了扩展@ Amal的答案,查询结果是一个包含所有结果的数组:

array(1) {
  [0] =>
  class SimpleXMLElement#2 (2) {
    public $@attributes =>
    array(1) {
      'id' =>
      string(6) "subAtt"
    }
        string(17) "Value to retrieve"
  }
}

单词:第一个元素是SimpleXMLElement实例,其字符串值是所需的文本。

一个完整的例子:

$string = <<<XML
<root>
    <parent>
        <child id="childAtt">
            <subChild id="subAtt">Value to retrieve</subChild>
        </child>
    </parent>
</root>
XML;

$xml = new SimpleXMLElement($string);
$result = $xml->xpath("/*//child[@id='childAtt']/subChild[@id='subAtt']");

var_dump($result);
print (string) $result[0] . "\n";