【发布时间】:2011-11-17 23:38:50
【问题描述】:
我现在真的很着急,我正在请求 REGEX 大师的帮助! 我通过 HTTP 请求接收 XML,但我无法解析它,因为它包含一些未包装在 CDATA 部分中的特殊字符。
示例 XML:
<root>
<node>good node</node>
<node>bad node containing &</node>
<root>
尝试使用 simplexml_load_string($xml) 解析这个 XML 我得到:
Warning: simplexml_load_string() [function.simplexml-load-string]:
Entity: line 3: parser error : xmlParseEntityRef: no name in /..../file.php on line ##
假设坏节点不包含 > 或 <,我需要一个 REGEX 将文本包装在 CDATA 部分中的节点中。我想会有一些环顾四周,我只是不能很快做到。
谢谢!
【问题讨论】:
-
简单:
$result = "<![CDATA[" . $get_file_contents() . "]]>";不需要正则表达式! -
那么,您没有任何方法可以让“XML”(阅读:“INVALID XML”)拥有编码实体?
-
不幸的是,我无法访问那台计算机,所以我暂时无能为力
-
@Kerrek:我应该包装每个终端非空节点的内容。您的解决方案会将整个 xml 树作为文本返回给我 - 无法解析
-
@s3v3n:only 是否可以找到杂散的 & 符号并用实体引用替换它们?