【问题标题】:Saving list items into an XML document将列表项保存到 XML 文档中
【发布时间】:2017-09-09 02:07:44
【问题描述】:

我有一个用 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 Tkinter 回调 Traceback 中的异常(最近一次调用最后一次):
call 中的文件“/usr/lib/python3.5/tkinter/init.py”,第 1553 行 返回 self.func(*args) 文件“/home/cali/PycharmProjects/Vocabulary/Vocabulary.py”,第 140 行,在 添加项目 self.save_all() 文件“/home/cali/PycharmProjects/Vocabulary/Vocabulary.py”,第 202 行,在 保存全部 tree.append(xTop) AttributeError: 'ElementTree' 对象没有属性 'append'

进程以退出代码 0 结束

...当我执行 add_item() 函数时,其中包含 save_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)

xDoc.Save(vocabulary_path) 的 Python 等效项是什么?

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

我正在使用 Python 3.5。

【问题讨论】:

    标签: c# python xml list


    【解决方案1】:

    您使用write() 方法将ElementTree 保存到文件中,因此相当于您的C# xDoc.Save(vocabulary_path) 将是:

    tree.write(vocabulary_path)
    

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

    xDoc.DocumentElement.AppendChild(xTop);
    

    所以 Python 中的等价物是:

    tree.getroot().append(xTop)
    

    【讨论】:

    • 我添加了tree.write(vocabulary),但没有得到任何结果。我之前添加的项目在程序启动时没有显示出来。你能检查其余的代码吗?我确定我犯了很多错误。拜托,这对我很重要。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-26
    • 2014-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多