在 simpleXML 中获取节点和子节点文本值
get node and subnode text value in simpleXML
我需要找到一种使用简单XML 提取节点+子节点文本内容的方法。
这是一个虚拟的例子:
<library>
<book>
<title>I love <i>apple pie</i></title>
</book>
<book>
<title>I love <i>chocolate</i></title>
</book>
</library>
考虑到 XML 存储在 $xml 变量中,这是我的 php:
$sxml = simplexml_load_string($xml);
foreach($sxml->xpath('//book') as $book){
//echo $book->title returns "I love"
//var_dump ($book->xpath('string(title)') returns empty array.
// What I want : "I love apple pie" (on the first iteration of the foreach) "I love chocolate" (on the second iteration of the foreach)
}
我是不是漏掉了什么?奇怪的是,simpleXML 似乎可以识别 xpath ('string') 函数,但它似乎没有对其求值。这是一个错误吗?有什么解决方法吗?
我已经开始探索使用 DOMDocument 和 DOMXpath::query 的解决方案,但文档似乎返回到根元素,这不是我在 foreach 中想要的行为...
非常感谢!
$book->title
的类型是 SimpleXMLElement. You could pass that to dom_import_simplexml and get the nodeValue:
$sxml = simplexml_load_string($xml);
foreach($sxml->xpath('//book') as $book){
echo dom_import_simplexml($book->title)->nodeValue . "<br>";
// or use
// echo strip_tags($book->title->asXml()) . "<br>";
}
那会给你:
I love apple pie
I love chocolate
我需要找到一种使用简单XML 提取节点+子节点文本内容的方法。
这是一个虚拟的例子:
<library>
<book>
<title>I love <i>apple pie</i></title>
</book>
<book>
<title>I love <i>chocolate</i></title>
</book>
</library>
考虑到 XML 存储在 $xml 变量中,这是我的 php:
$sxml = simplexml_load_string($xml);
foreach($sxml->xpath('//book') as $book){
//echo $book->title returns "I love"
//var_dump ($book->xpath('string(title)') returns empty array.
// What I want : "I love apple pie" (on the first iteration of the foreach) "I love chocolate" (on the second iteration of the foreach)
}
我是不是漏掉了什么?奇怪的是,simpleXML 似乎可以识别 xpath ('string') 函数,但它似乎没有对其求值。这是一个错误吗?有什么解决方法吗?
我已经开始探索使用 DOMDocument 和 DOMXpath::query 的解决方案,但文档似乎返回到根元素,这不是我在 foreach 中想要的行为...
非常感谢!
$book->title
的类型是 SimpleXMLElement. You could pass that to dom_import_simplexml and get the nodeValue:
$sxml = simplexml_load_string($xml);
foreach($sxml->xpath('//book') as $book){
echo dom_import_simplexml($book->title)->nodeValue . "<br>";
// or use
// echo strip_tags($book->title->asXml()) . "<br>";
}
那会给你:
I love apple pie
I love chocolate