我无法控制的服务器使用'>''&'''''''''''''&#39 ;属性和文本等。
小样本:
<StockFormula Description="" Name="F_ΔTURN" RankType="Higher" Scope="Universe" Weight="10.86%">
<Formula>AstTurnTTM>AstTurnPTM</Formula>
</StockFormula>
<Composite Name="Piotroski & Trends - <11@4w600k 70b" Weight="0%" RankType="Higher">
</Composite>
我决定使用lxml模块,因为它区分大小写,非常快并完成工作。
我如何修复这种类型的XML?基本上,我试图用适当的转义序列替换所有出现的无效字符。
import re
broken = '<StockFormula Description="" Name="F_ΔTURN" RankType="Higher" Scope="Universe" Weight="10.86%">\n<Formula>AstTurnTTM>AstTurnPTM</Formula>\n<Composite Name="Piotroski & Trends - <11@4w600k 70b" Weight="0%" RankType="Higher">\n</Composite>'
print re.sub(r'(.*Name=".*)&(")', r'\g<1>>\g<2>', broken)
输出:
<StockFormula Description="" Name="F_ÃŽâ€TURN" RankType="Higher" Scope="Universe" Weight="10.86%">
<Formula>AstTurnTTM>AstTurnPTM</Formula>
</StockFormula>
<Composite Name="Piotroski & Trends - <11@4w600k 70b" Weight="0%" RankType="Higher">
</Composite>
答案 0 :(得分:3)
首先,要意识到没有XML解析器可以帮助您解决XML问题。&#34; XML解析器仅对XML进行操作,根据定义,XML必须为 well-formed 。
其次,无法修复&#34;破碎的XML&#34;在一般情况下。没有规则可以控制XML的破坏。&#34;如果没有明确定义&#34;破坏XML,&#34;您无法保证能够处理它并将其转换为真正的XML。
尽管如此,HTML Tidy在修复(X)HTML方面做得不错,而且修复XML的能力有限。对于自动修复“破碎的XML”,这是最好的选择。&#34;有一个Python包PyTidyLib,它包装了HTML Tidy库。