【问题标题】:Adding XML data from a XML file to an existing XML file将 XML 数据从 XML 文件添加到现有 XML 文件
【发布时间】:2014-01-16 11:31:13
【问题描述】:

我对 Python 很陌生,只阅读了Learn Python the Hard Way。但我认为这仍然超出了我的范围。我的技能是 XML/XSL,而不是 Python。我需要一点帮助才能开始。

概述:我需要将缺失的 XML 数据 (addition.xml) 添加到现有的 XML 文件 (original.xml) 中。

XML 文件(包含缺失的数据):(addition.xml)

<profile>
    <dog-list>
        <dog>
            <name>sally</dog>
            <age>1</age>
        </dog>
        <dog>
            <name>susie</dog>
            <age>12</age>
        </dog>
    </dog-list>
    <people-list>
        <person>
            <name>ue</name>
            <age>25</age>
            <gender>female</gender>
        </person>
    </people-list>
</profile>

上面的 XML 数据添加到这个 XML 文件中:(original.xml)

<profile>
    <cat-list>
        <cat>
            <name>foo></name>
        </cat>
        <cat>
            <name>bar</name>
            <age>3</age>
        </cat>
    </cat-list>
    <bird-list>
        <bird>
            <name>cricket</name>
            <age>2</age>
        </bird>
    </bird-list>
    <people-list>
        <person>
            <name>tyler</name>
            <age>26</age>
        </person>
    </people-list>
    <car-list>
        <car>
            <make>mitsubishi</make>
            <model>evo x</model>
            <year>2013</year>
        </car>
    </car-list>
</profile>

我的预期输出应该是:--> 新的(original.xml)

<profile>
    <cat-list>
        <cat>
            <name>foo></name>
        </cat>
        <cat>
            <name>bar</name>
            <age>3</age>
        </cat>
    </cat-list>
    <dog-list>
        <dog>
            <name>sally</dog>
            <age>1</age>
        </dog>
        <dog>
            <name>susie</dog>
            <age>12</age>
        </dog>
    </dog-list>
    <bird-list>
        <bird>
            <name>cricket</name>
            <age>2</age>
        </bird>
    </bird-list>
    <people-list>
        <person>
            <name>tyler</name>
            <age>26</age>
        </person>
        <person>
            <name>ue</name>
            <age>25</age>
            <gender>female</gender>
        </person>
    </people-list>
    <car-list>
        <car>
            <make>mitsubishi</make>
            <model>evo x</model>
            <year>2013</year>
        </car>
    </car-list>
</profile>

这里发生的情况是原始.xml 文件中缺少addition.xml 中的数据。我该如何将addition.xml中的数据添加到original.xml中,而不是创建一个新文件,覆盖它。

我在 google 和 stackoverflow 上到处查看。我知道我可以使用ElementTree,但我最模糊的想法是如何创建这个结果。

非常感谢任何帮助!

【问题讨论】:

  • 您的 xml 数据无效:请注意不匹配的开始和结束标签。
  • 已修复。抱歉,我输入了,错过了结束标签&lt;/bird-list&gt;
  • 元素的顺序是否相关? &lt;dog-list&gt; 必须在 &lt;cat-list&gt; 之后吗?
  • 是的,我终于找到了与here 非常接近的东西。但它不是闯入一条新线,而是将这条线并排聚集在一起。
  • 并且它不会覆盖文件或创建新文件。它只是在终端打印它。

标签: python xml elementtree


【解决方案1】:

您的要求不允许使用通用合并程序(例如您链接到的那个),但这里有一个可能适合您的程序。

用法:./program.py original.xml 添加.xml

#! /usr/bin/python2

import sys
from lxml import etree

result = etree.Element('root')
parser = etree.XMLParser(remove_blank_text=True)

# Add each file to the tree
for xmlfile in sys.argv[1:]:
  with open(xmlfile) as xmlfile:
    btree = etree.parse(xmlfile, parser)
  # Ensure that the resulting tree has the right root
  result.tag = btree.getroot().tag
  # Consider each 2nd-level item
  for bchild in btree.xpath("/*/*"):
    tags = result.xpath("./%s"%bchild.tag)
    if len(tags) == 0:
      # Add <dog-list>, for example
      #print "adding %s to %s"%(bchild.tag, result.tag)
      result.append(bchild)
    else:
      for bgrandchild in bchild:
        # add <dog>, for example
        #print "adding %s to %s"%(bgrandchild.tag, tags[0].tag)
        tags[0].append(bgrandchild)

with open("output.xml", "w") as output:
  output.write(etree.tostring(result, pretty_print = True))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多