如何使用child.text函数读取带有iso-8859-1编码的lxml的简单xml文件



我有结构简单的xml文件:

<?xml version="1.0" encoding="iso-8859-1"?>
<DICTIONARY>
    <Tag1>
        Übung1 Übersetzung1
        Übung2 Übersetzung2
        Übung3 Übersetzung3
        Übung4 Übersetzung4
        Übung5 Übersetzung5
    </Tag1>
    <Tag2>
        Übung6 Übersetzung6
        Übung7 Übersetzung7
        Übung8 Übersetzung8
        Übung9 Übersetzung9
        Übung10 Übersetzung10
    </Tag2>
</DICTIONARY>

我想用lxml阅读这些文件,因为它很简单。我使用 child.text 来读取文本部分,但编码似乎没有传递给输出字符串。请参阅下面的代码和输出。

我已经使用编解码器读取 iso-8859-1 的文件,但它没有改变任何东西。

from lxml import etree
import codecs
def read_xml(): 
    taglist=[]
    new_dicts=[]
    with codecs.open("A:/test/test.txt", 'r', 
                     encoding='iso-8859-1') as xmlfile:
        try:
            tree=etree.parse(xmlfile)
            loaded=True
            print ("XML-encoding: ",tree.docinfo.encoding)
        except:
            loaded=False
            print ("""No dictionary loaded or xml structure is missing! Please try again!""")

    if loaded:
        root = tree.getroot()
        for child in root:
            new_dict={}
            tagname=child.tag
            taglist.append(tagname)
            print ("Loading dictionary for tag: ",
                   tagname)
            allstrings= child.text                
            allstrings=allstrings.split("n")
            for line in allstrings:
                if line!=" " and line!="":
                    line=line.split("t")
                    if line[0]!="" and line[1]!="":
                        enc_line0=line[0]
                        enc_line1=line[1]
                        new_dict.update({enc_line0:enc_line1})
            new_dicts.append(new_dict)
    return taglist, new_dicts
print (read_xml())

输出:

XML-encoding:  iso-8859-1
Loading dictionary for tag:  Tag1
Loading dictionary for tag:  Tag2
(['Tag1', 'Tag2'], [{'Ãx9cbung1': 'Ãx9cbersetzung1', 'Ãx9cbung2': 'Ãx9cbersetzung2', 'Ãx9cbung3': 'Ãx9cbersetzung3', 'Ãx9cbung4': 'Ãx9cbersetzung4', 'Ãx9cbung5': 'Ãx9cbersetzung5'}, {'Ãx9cbung6': 'Ãx9cbersetzung6', 'Ãx9cbung7': 'Ãx9cbersetzung7', 'Ãx9cbung8': 'Ãx9cbersetzung8', 'Ãx9cbung9': 'Ãx9cbersetzung9', 'Ãx9cbung10': 'Ãx9cbersetzung10'}])

然而,我希望以与命令打印("Übung"(相同的方式获得输出,例如。我做错了什么?

lxml 适用于二进制文件。尝试改变

with codecs.open("A:/test/test.txt", 'r', 
                 encoding='iso-8859-1') as xmlfile:

with codecs.open("A:/test/test.txt", 'rb', 
                 encoding='iso-8859-1') as xmlfile:

好的,我没有找到合适的解决方案,但是通过转换 UTF-8 中的所有内容,我在进一步的步骤中没有问题 - 例如将单词与字典和其他字符串中的变音符号进行比较。

最新更新