如何使Python的ElementTree忽略引号和属性之间缺少空格?

时间:2019-07-01 03:10:19

标签: python elementtree

我跑步时

from xml.etree import ElementTree
tree = ElementTree.fromstring('<foo bar=""baz=""></foo>')

我明白了

  

xml.etree.ElementTree.ParseError:格式不正确(令牌无效):第1行,第11列

这是由于""baz之间缺少空格。

我在第三方提供给我的XML文件中遇到了这个问题。

是否有什么方法可以使ElementTree的空格不再那么花哨,并像存在空格一样对其进行解析?

1 个答案:

答案 0 :(得分:1)

由于听起来好像解决方案可能不见了...

在出现更好的解决方案之前,这是解决下一个可怜的灵魂的解决方法...

def xml_fixup(s):  # give it the XML as a tring
    flags = re.DOTALL
    pat_quotes = '\"[^\"]*\"|\'[^\']*\''
    re_quotes = re.compile('(%s)([^>\\s])' % pat_quotes, flags)  # TODO: cache
    re_pieces = re.compile('([^<]+)|(<)((?:[^\"\'>]+|%s)*)(>)' % pat_quotes, flags)  # TODO: cache
    pieces = re_pieces.findall(s)
    return s[:0].join(map(lambda m: m[0] or m[1] + re_quotes.sub('\\1 \\2', m[2]) + m[3], pieces))

print(xml_fixup('<foo bar=""baz=""></foo>'))  # <foo bar="" baz=""></foo>

如果发现错误,Brownie会指出!