在simpleXML中获取节点和子节点文本值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在simpleXML中获取节点和子节点文本值相关的知识,希望对你有一定的参考价值。

我需要找到一种方法来使用simpleXML提取节点+子节点的文本内容。

这是一个虚拟的例子:

<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的解决方案,但似乎文档回到了根元素,这不是我想要的行为......

非常感谢 !

答案

$book->titleSimpleXMLElement类型。你可以将它传递给dom_import_simplexml并获得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

Demo

以上是关于在simpleXML中获取节点和子节点文本值的主要内容,如果未能解决你的问题,请参考以下文章

从 PHP SimpleXML 节点获取实际值 [重复]

SimpleXML - “节点不再存在”

使用 simplexml 获取 XML 文档的根节点

具有多个父节点和子节点的链表

使用 simplexml 将 xml 节点值更新 1。是不是可以?

如何使用simpleXML(php)通过xpath获取父节点