我现在非常匆忙,我恳求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部分的节点中。我想会有一些看法,我不能快速做到。
谢谢!
答案 0 :(得分:2)
如果您确实可以假设您想要CDATA-ize的节点中没有<
或>
个字符,那么这应该适用于您的情况:
>(?=[^<&]*&)([^<]*)<
替换为
<!CDATA[\1]]>
此表达式仅查找包含&
个字符的节点(无论它们是否为HTML实体的一部分),然后将这些节点的内容包装在CDATA标记中,如果您需要忽略{{1}实体内部的字符,这有点难度,但我愿意看一看。