我现在真的很着急,我请求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标记中,如果需要忽略实体内的&
字符,这相当困难,但我愿意看一看。