python - 如何忽略xml文件中的特定标签?

标签 python xml

在我的 xml 文件中的某个时刻,我有贡献者

<revision>
      <id>1</id>
      <timestamp>2012-10-25T15:50:18Z</timestamp>
      <contributor>
        <ip>127.0.0.1</ip>
      </contributor>
</revision>

在我的 xml 文件中的另一点有贡献者

<revision>
      <id>2</id>
      <parentid>1</parentid>
      <timestamp>2012-10-26T20:13:56Z</timestamp>
      <contributor>
        <username>Reedy</username>
        <id>2</id>
      </contributor>
</revision>

我编写了一个 python 脚本,它将解析 xml 文件并将我们需要的任何标签返回到输出文件中。但在我的贡献者下,我有两个不同的东西:Ip 和用户名、id。我想忽略 Ip,只想将用户名和 id 写入我的输出文件。如果两者都有,我会收到类似 KeyError: 'username'

的关键错误

这是我的代码

import xmltodict
with open('path to xml file') as xml_file:
  dic_xml = xmltodict.parse(xml_file.read())
  page = dic_xml['mediawiki']['page']
  data = list()
  for rev in page['revision']:
      my_string = ""
      my_string += " " + "username:" + dict(rev['contributor'])['username']
      my_string += " " + "userid:" + dict(rev['contributor'])['id']
      my_string += "\n"
      data.append(my_string)

with open('output', 'w') as writingFile:
    for i in data:
        writingFile.write(i)

最佳答案

只需使用内置Python xml element tree module ,特别是带有标签和文本属性的 dom 对象,您可以通过标签名称进行条件控制:

第一贡献者类型:

import xml.etree.ElementTree as etree

xmlfile = '''\
<revision>
      <id>1</id>
      <timestamp>2012-10-25T15:50:18Z</timestamp>
      <contributor>
        <ip>127.0.0.1</ip>
      </contributor>
</revision>'''

dom = etree.fromstring(xmlfile)
data = dom.findall('contributor/*')

with open('output', 'w') as writingFile:
    for items in data:
        if items.tag != 'ip':
            writingFile.write(items.tag + ': ' + items.text + '\n')
# <NOTHING>

第二种贡献者类型:

xmlfile = '''\
<revision>
      <id>2</id>
      <parentid>1</parentid>
      <timestamp>2012-10-26T20:13:56Z</timestamp>
      <contributor>
        <username>Reedy</username>
        <id>2</id>
      </contributor>
</revision>'''

dom = etree.fromstring(xmlfile)
data = dom.findall('contributor/*')

with open('output', 'w') as writingFile:
    for items in data:
        if items.tag != 'ip':
            writingFile.write(items.tag + ': ' + items.text + '\n')
# username: Reedy
# id: 2

关于python - 如何忽略xml文件中的特定标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36586736/

相关文章:

Python:从命令行运行时包含库文件夹

python - Django Rest Framework : AttributeError when Serializer many=False, 但不是当 many=True

xml - 将包含多个工作表的 Excel 2003 xml 文件导入 Microsoft Dynamics 2011

java - 从 JAXB 转换 null java.lang.Integer 产生 0,而不是 null

python - 在 App Engine 上分析内存使用情况

python - 无法从 pyspark 连接到 Mongo

xml - 在后台线程上将 XML 解析为 CoreData 以不锁定 UI

PHP DOM XML 格式输出在第一行添加空格

python - 在 boost python 中 pickle 一个 vector ?

android - recyclerview 中的最后一项被切断