为什么用 lxml 写完一个 XML-file 后,属性值中的非 ASCII 字符会被转义?

问题描述 投票:1回答:1

我试图用python不断地建立一个xml-file,并且用 etree.xmlfilelxml.

我的输入是一个XML文件,其中有umlauts的属性值。我把这个文件用 lxml,对属性的名称做一些修改,然后写到一个新的文件中。

这是我的代码,分解一下。

with etree.xmlfile(path_to_new_file, encoding="utf8") as xf:                                             
    with xf.element("corpus"):                                                                      
        for _, element in etree.iterparse(path_to_original_file, tag="comment"):                                               
            new_element = transform_element(element)                                                                                                   
            xf.write(new_element)
            del element
            del new_element

在原始文件中,我可能有一个这样的元素。

<comment title="Kübel">Some text with umlauts like this üä</comment>

但经过处理后,同样的注释在新文件中看起来是这样的。

<comment title="K&#xFC;bel">Some text with umlauts like this üä</comment>

你知道是什么原因造成的吗? Do you have any idea what might cause this?

python xml unicode lxml elementtree
1个回答
2
投票

ü 在XML属性值中不需要转义(或者在元素的文本节点子节点中)。

可能是库的开发者过于谨慎,调用了一个通用的转义字符串函数,可能是为了利用其转义后的 <,它总是要被逃掉的,和。'" 当匹配属性值的分隔引号时,必须对其进行转义。

关于精确的转义要求,请参见 简化的XML转义.

© www.soinside.com 2019 - 2024. All rights reserved.