将CDATA插入XML

时间:2011-11-17 15:24:28

标签: php xml regex

我现在非常匆忙,我恳求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部分的节点中。我想会有一些看法,我不能快速做到。

谢谢!

1 个答案:

答案 0 :(得分:2)

如果您确实可以假设您想要CDATA-ize的节点中没有<>个字符,那么这应该适用于您的情况:

>(?=[^<&]*&)([^<]*)<

替换为

<!CDATA[\1]]>

此表达式仅查找包含&个字符的节点(无论它们是否为HTML实体的一部分),然后将这些节点的内容包装在CDATA标记中,如果您需要忽略{{1}实体内部的字符,这有点难度,但我愿意看一看。