脚本宝典收集整理的这篇文章主要介绍了PHP,SimpleXML,解码CDATA中的实体,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
$XMl_string1 = "<PErson><name><![CDATA[ Someone&#039;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
@L_777_0@文档说NOCDATA“将[CD] CDATA合并为文本节点”.对我来说,这意味着CDATA将被视为与文本节点相同 – 或者第三个示例的行为现在将与第二个示例相同.
我无法控制XML(它是来自外部源的提要),否则我只是删除CDATA标记,因为它什么也不做,并且破坏了我想要的行为.
为什么上面的例子表现得如此?有没有办法让SimpleXML以与处理文本节点相同的方式处理CDATA节点? “合并CDATA作为文本节点”实际上做了什么,因为我似乎不理解该选项?
在我提取数据之后,我正在解码,但上面的例子对我来说仍然没有意义.
$xml_string = "<person><name>Welcome aboard this <![CDATA[P&O Cruises]]> voyage!</name></person>"; $person = new SimpleXMLElement($xml_string); echo 'CDATA retained: ',$person->asXML(); // CDATA retained: <?xml version="1.0"?> // <person><name>Welcome aboard this <![CDATA[P&O Cruises]]> voyage!</name></person> $person = new SimpleXMLElement($xml_string,LIBXML_NOCDATA); echo 'CDATA merged: ',$person->asXML(); // CDATA merged: <?xml version="1.0"?> // <person><name>Welcome aboard this P&O Cruises voyage!</name></person>
如果您正在解析的XML文档包含实际包含实体的CDATA部分,则需要获取该字符串并将其完全独立于XML.执行此操作的一个常见原因(除了对库不太了解的懒惰)是将HTML中标记的内容视为XML文档中的任何旧字符串,如下所示:
<Comment> <SubmITtedBy>IMSoP</SubmittedBy> <Text><![CDATA[I'm <em>really</em> bad at keeping my answers brief <tt>;)</tt>]]></Text> </Comment>
以上是脚本宝典为你收集整理的PHP,SimpleXML,解码CDATA中的实体全部内容,希望文章能够帮你解决PHP,SimpleXML,解码CDATA中的实体所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。