Insert CDATA into an XML


Insert CDATA into an XML

我现在真的很着急,我请求REGEX大师的帮助!我通过HTTP请求接收XML,我只是无法解析它,因为它包含一些特殊字符,而不是包装在CDATA节。

XML示例:

<root>
    <node>good node</node>
    <node>bad node containing &</node>
<root>

试图解析这个XML与simplexml_load_string($xml)我得到:

Warning: simplexml_load_string() [function.simplexml-load-string]:
Entity: line 3: parser error : xmlParseEntityRef: no name in /..../file.php on line ##

假设坏节点不包含><,我需要一个REGEX,它将在CDATA节中包装节点中的文本。我想会有一些人四处寻找,我只是不能很快完成。

谢谢!

如果您确实可以假设在要进行cdata化的节点中没有<>字符,那么这应该适合您的情况:

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

替换

<!CDATA['1]]>

该表达式只查找包含&字符的节点(无论它们是否是HTML实体的一部分),然后将这些节点的内容包装在CDATA标记中,如果需要忽略实体内的&字符,这相当困难,但我愿意看一看。