我有这个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}}的文字值。
答案 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";