我跑步时
from xml.etree import ElementTree
tree = ElementTree.fromstring('<foo bar=""baz=""></foo>')
我明白了
xml.etree.ElementTree.ParseError
:格式不正确(令牌无效):第1行,第11列
这是由于""
和baz
之间缺少空格。
我在第三方提供给我的XML文件中遇到了这个问题。
是否有什么方法可以使ElementTree
的空格不再那么花哨,并像存在空格一样对其进行解析?
答案 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会指出!