python - 对使用哪个 XML 处理选项感到困惑

标签 python xml dom elementtree minidom

我是 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 并将其保存回文件。假设可能发生三种类型的数据更改:

  1. 更改一项或多项的数据,例如更新电话号码

  2. 添加新地址 block (以及新地址的街道/城市/州的相应数据)

  3. 删除现有地址 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/

相关文章:

javascript - 使用 Javascript 创建 newOption() 时附加文本和值

python suds UsernameToken

Java XML 实践

java - 尝试为我自己的 XML 样式文件格式编写解析器,但出现 FileNotFoundException,我有什么特别做错的地方吗?

java - 将 SOAPMessage 对象转换为 Java 中 XmlType 注释类的实例

javascript - 基本 Window.alert 功能在 Meteor 中不起作用

java - 个人项目 "RSS FEED"XML解析器

python - cv2.COLOR_BGR2Lab 不工作,但 cv2.COLOR_BGR2GRAY 正在工作

Python findall、正则表达式

python - 取样方法