相关疑难解决方法(0)

PHP SimpleXML获取innerXML

我需要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没有元素本身缠绕的元素?

我更喜欢不涉及字符串函数的方法,但如果这是唯一的方法,那就这样吧.

php innerxml simplexml

8
推荐指数
3
解决办法
9909
查看次数

PHP,SimpleXML,解码CDATA中的实体

我遇到以下行为:

$xml_string1 = "<person><name><![CDATA[ Someone&#039;s Name ]]></name></person>";
$xml_string2 = "<person><name> Someone&#039;s Name </name></person>";

$person = new SimpleXMLElement($xml_string1);
print (string) $person->name; # Someone&#039;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&#039;s Name
Run Code Online (Sandbox Code Playgroud)

php文档说NOCDATA"将[CD] CDATA合并为文本节点".对我来说,这意味着CDATA将被视为与文本节点相同 - 或者第三个示例的行为现在将与第二个示例相同.

我无法控制XML(它是来自外部源的提要),否则我只是删除CDATA标记,因为它什么也不做,并且破坏了我想要的行为.

为什么上面的例子表现得如此?有没有办法让SimpleXML以与处理文本节点相同的方式处理CDATA节点?"合并CDATA作为文本节点"实际上做了什么,因为我似乎不理解该选项?

在我提取数据之后,我正在解码,但上面的例子对我来说仍然没有意义.

php xml simplexml cdata libxml2

6
推荐指数
1
解决办法
8621
查看次数

标签 统计

php ×2

simplexml ×2

cdata ×1

innerxml ×1

libxml2 ×1

xml ×1