我是 Python 的新手,我才刚刚开始使用 XML 解析。我对使用 XML 的所有选项感到有点不知所措,我希望有经验的人可以为我正在处理的简单问题提供一些建议(也许还有代码示例??)。
我正在开发一个不涉及数据库的简单 Python 联系人管理应用程序 - 每个联系人的信息都使用 XML 存储在单独的文本文件中。例如,假设以下是文件“1234.xml”的内容
<contact>
<id>1234</id>
<name>Johnny Appleseed</name>
<phone>8145551212</phone>
<address>
<street>1234 Main Street</street>
<city>Hometown</city>
<state>OH</state>
</address>
<address>
<street>1313 Mockingbird Lane</street>
<city>White Plains</city>
<state>NY</state>
</address>
</contact>
为了举例,我们假设只能有一个电话号码,但有多个地址 block 。
对于我在这里所做的事情,我需要能够从文件中解析 XML,对数据进行更改,然后更新 XML 并将其保存回文件。假设可能发生三种类型的数据更改:
更改一项或多项的数据,例如更新电话号码
添加新地址 block (以及新地址的街道/城市/州的相应数据)
删除现有地址 block
考虑到我在这里尝试做的事情,您能推荐一种特定的方法吗? (SAX、DOM、minidom、ElementTree 或其他?)非常感谢您提出的任何建议的代码示例。
谢谢!
罗恩
最佳答案
SAX 和 DOM API 较旧;它们几乎是从 Java 世界翻译成 Python 的。 ElementTree API 专门设计为 Pythonic,即适合 Python 解决问题的方式,所以更喜欢它。
我所知道的最丰富和最快的 ElementTree 实现是 lxml .它的 XPath 功能非常有用。 未经测试示例:
from lxml import etree
contacts = etree.parse(open("1234.xml"))
for c in contacts.xpath('//contact'):
if c.xpath('/name')[0].text == 'Johnny Appleseed':
c.xpath('/phone')[0].text = NEW_PHONE_NUMBER
print >> open("1234.xml", "w"), etree.tostring(contacts)
关于python - 对使用哪个 XML 处理选项感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6443839/