我有包含讨厌的嵌套 CDATA 的 XML(在其他地方生成,无法控制),例如:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE prc SYSTEM "prc.dtd">
<body>
<![CDATA[Towards Automatic Generation blabla
<definition>
<query><![CDATA[ <root[AByS]> <sc methodName="get_NYT.ARTICLES" serviceURL="http://www.nytimes.com/srv/">
<params> <param name="subjectP" value="{ subjectP }"> </> </> </> <sc methodName="get_WP.ARTICLES"
serviceURL="http://www.wpost.com/srv/"> <params> <param name="subjectP" value="{ subjectP }"> </> </>
</> </>; ]]></query> </definition> </serviceDefinition> (b) Figure 7. (a) The query for Web service
]]>
</body>
lxml
(Python)炸弹
XMLSyntaxError: Opening and ending tag mismatch: body line 3 and query, line 9, column 28
因为它认为第一个]]>
结束 CDATA,而实际上它只结束内部 CDATA,而后面的标签 ,</query>
仍然在外部 CDATA 内,不应该被解析。
什么是解析此类 XML 的好方法?这意味着我希望 CDATA 中的所有内容都保留为未解析的数据,即使它内部包含更多 CDATA。写我自己的解析器?想法?