将列表项保存到XML文档中

2024-10-03 17:22:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个用C语言编写的应用程序,我需要将它转换成Python,因为我最近已经切换到Linux。这是一个简单的GUI应用程序,用于在学习新语言(词汇表)时管理未知单词。然而,当应用程序关闭时,它应该将列表中的每一项保存到XML文档中

在C#中,我将创建以下方法:

void SaveAll()
{

    XmlDocument xDoc = new XmlDocument();

    string path = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
    string vocabulary_path = path + "\\Vocabulary\\Words.xml";

    xDoc.Load(vocabulary_path);
    XmlNode xNode = xDoc.SelectSingleNode("Words");
    xNode.RemoveAll();
    foreach (Word w in words)
    {
        XmlNode xTop = xDoc.CreateElement("Word");
        XmlNode xWord = xDoc.CreateElement("Word");
        XmlNode xExplanation = xDoc.CreateElement("Explanation");
        XmlNode xTranslation = xDoc.CreateElement("Translation");
        XmlNode xExamples = xDoc.CreateElement("Examples");

        xWord.InnerText = w.WordOrPhrase;
        xExplanation.InnerText = w.Explanation;
        xTranslation.InnerText = w.Translation;
        xExamples.InnerText = w.Examples;
        xTop.AppendChild(xWord);
        xTop.AppendChild(xExplanation);
        xTop.AppendChild(xTranslation);
        xTop.AppendChild(xExamples);
        xDoc.DocumentElement.AppendChild(xTop);
    }

    xDoc.Save(vocabulary_path);
    Sync();

}

…但是我担心我用Python写的代码的有效性。问题是列表元素没有被保存。另外,我得到:

/usr/bin/python3.5 /home/cali/PycharmProjects/Vocabulary/Vocabulary.py Exception in Tkinter callback Traceback (most recent call last):
File "/usr/lib/python3.5/tkinter/init.py", line 1553, in call return self.func(*args) File "/home/cali/PycharmProjects/Vocabulary/Vocabulary.py", line 140, in add_item self.save_all() File "/home/cali/PycharmProjects/Vocabulary/Vocabulary.py", line 202, in save_all tree.append(xTop) AttributeError: 'ElementTree' object has no attribute 'append'

Process finished with exit code 0

…当我执行add \u item()函数时,其中包含save \u all()函数

def save_all(self):

    path = os.path.expanduser('~/Desktop')
    vocabulary = os.path.join(path, 'Vocabulary', 'Words.xml')

    tree = ET.ElementTree(file=vocabulary)

    for xNode in tree.findall('Words'):
        tree.remove(xNode)

    for w in self.words:
        xTop = ET.Element('Word')
        xWord = ET.Element('Word')
        xExplanation = ET.Element('Explanation')
        xTranslation = ET.Element('Translation')
        xExamples = ET.Element('Examples')

        xWord.text = w.wordorphrase
        xExplanation.text = w.explanation
        xTranslation.text = w.translation
        xExamples.text = w.example

        xTop.append(xWord)
        xTop.append(xExplanation)
        xTop.append(xTranslation)
        xTop.append(xExamples)

        tree.append(xTop)

Python的xDoc.Save(vocabulary_path)等价物是什么

Python的xDoc.DocumentElement.AppendChild(xTop)等价物是什么

我使用的是python3.5


Tags: pathinetwordvocabularyappendappendchildxtop
1条回答
网友
1楼 · 发布于 2024-10-03 17:22:43

使用^{}方法将ElementTree保存到文件中,因此与C#xDoc.Save(vocabulary_path)等效的方法是:

tree.write(vocabulary_path)

另外,下面的代码意味着将xTop附加到根元素:

xDoc.DocumentElement.AppendChild(xTop);

因此,在Python中的等价物是:

tree.getroot().append(xTop)

相关问题 更多 >