我有一个用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回调中的异常回溯(最近一次调用最后一次):
在电话中输入文件“/usr/lib/python3.5/tkinter/init.py”,第1553行 return self.func(* args)File“/home/cali/PycharmProjects/Vocabulary/Vocabulary.py”,第140行,in 新增项目 self.save_all()文件“/home/cali/PycharmProjects/Vocabulary/Vocabulary.py”,第202行,in 保存全部 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)
Python与xDoc.Save(vocabulary_path)
的等效内容是什么?
什么是Python相当于xDoc.DocumentElement.AppendChild(xTop)
我正在使用Python 3.5。
答案 0 :(得分:0)
您可以使用write()
方法将ElementTree
保存到文件中,因此与您的C#xDoc.Save(vocabulary_path)
相同的是:
tree.write(vocabulary_path)
此外,以下代码段意味着将xTop
附加到根元素:
xDoc.DocumentElement.AppendChild(xTop);
所以Python中的等价物是:
tree.getroot().append(xTop)