我需要answer在这一点XML中获取HTML内容:
<qa>
<question>Who are you?</question>
<answer>Who who, <strong>who who</strong>, <em>me</em></answer>
</qa>
Run Code Online (Sandbox Code Playgroud)
所以我希望得到一个字符串"Who who,<strong>谁是</ strong>,<em> me </ em>".
如果我有answera SimpleXMLElement,我可以打电话asXML()来"<answer>谁是谁,<strong>谁</ strong>,<em>我</ em> </ answer>",但是如何获得内部XML没有元素本身缠绕的元素?
我更喜欢不涉及字符串函数的方法,但如果这是唯一的方法,那就这样吧.
我遇到以下行为:
$xml_string1 = "<person><name><![CDATA[ Someone's Name ]]></name></person>";
$xml_string2 = "<person><name> Someone's Name </name></person>";
$person = new SimpleXMLElement($xml_string1);
print (string) $person->name; # Someone's Name
$person = new SimpleXMLElement($xml_string2);
print (string) $person->name; # Someone's Name
$person = new SimpleXMLElement($xml_string1, LIBXML_NOCDATA);
print (string) $person->name; # Someone's Name
Run Code Online (Sandbox Code Playgroud)
php文档说NOCDATA"将[CD] CDATA合并为文本节点".对我来说,这意味着CDATA将被视为与文本节点相同 - 或者第三个示例的行为现在将与第二个示例相同.
我无法控制XML(它是来自外部源的提要),否则我只是删除CDATA标记,因为它什么也不做,并且破坏了我想要的行为.
为什么上面的例子表现得如此?有没有办法让SimpleXML以与处理文本节点相同的方式处理CDATA节点?"合并CDATA作为文本节点"实际上做了什么,因为我似乎不理解该选项?
在我提取数据之后,我正在解码,但上面的例子对我来说仍然没有意义.