XML Parser SAX和Python中的放大器

时间:2015-06-11 01:29:20

标签: python xml parsing sax

我一直在寻找2天来解决这个问题...我是一个XML,我解析了这个XML文件。其中一个XML文件内容有''。它是一个URL字段。

在示例中..如果网址是这样的。

http://www.url.com/content/hello&whatsup

XML解析器会返回http://www.url.com/content/hello

我该如何解决?使用xml sax lib。我一直在尝试使用xml utils sax。

1 个答案:

答案 0 :(得分:0)

XML解析器可能将“& whatsup”部分解释为xml实体,并且因为它没有解析它似乎无声地失败并且吃掉字符串。 XML实体主要用于包含元字符,否则这些元字符将被解释为有关如何读取文件的指令。大多数(如果不是全部)xml输出库将自动编码&到& amp; (默认情况下,在你写出元素时)(对于分号前没有空格)。

您有3个选项。一种是用

替换XML中的url
http://www.url.com/content/hello&whatsup

您可以对文件进行某种首次传递以正确编码& s,但可能没有可靠的方法来执行此操作。您可以尝试更换&使用 replaceme_ampersand ,将其读入,并将其替换回&amp ;.但是您必须确保该文件不包含实际的合法实体引用(或者没有解析它们)。另一种可能性是使用CDATA转义您知道的内容,包含非转义字符,如下所示:

<![CDATA[http://www.url.com/content/hello&whatsup]]>

第二个选项是不使用任何xml解析器,而是手动解析文件,通过正则表达式模式查找开始/结束标记。我可能会选择这个,具体取决于xml文件的复杂性及其包含的内容。

第三个选项是尝试查找xml解析器或设置,以便在找到未知/无效的xml实体引用时更改默认行为。您可以通过引发错误或按原样保留无效文本来覆盖此“吃实体”行为。你自己就是这个!