当前位置: 首页 > 面试题库 >

使用python的ElementTree合并xml文件

雷硕
2023-03-14
问题内容

我需要在xml的第三个块上合并两个xml文件。因此,文件A.xml和B.xml如下所示:

A.xml

<sample id="1">
<workflow value="x" version="1"/>
  <results>
   <result type="T">
      <result_data type="value" value="19"/>
      <result_data type="value" value="15"/>
      <result_data type="value" value="14"/>
      <result_data type="value" value="13"/>
      <result_data type="value" value="12"/>
    </result>
  </results>
</sample>

B.xml

<sample id="1">
<workflow value="x" version="1"/>
  <results>
   <result type="Q">
      <result_data type="value" value="11"/>
      <result_data type="value" value="21"/>
      <result_data type="value" value="13"/>
      <result_data type="value" value="12"/>
      <result_data type="value" value="15"/>
    </result>
  </results>
</sample>

我需要合并“结果”

<sample id="1">
<workflow value="x" version="1"/>
  <results>
   <result type="T">
      <result_data type="value" value="19"/>
      <result_data type="value" value="15"/>
      <result_data type="value" value="14"/>
      <result_data type="value" value="13"/>
      <result_data type="value" value="12"/>
   </result>
   <result type="Q">
      <result_data type="value" value="11"/>
      <result_data type="value" value="21"/>
      <result_data type="value" value="13"/>
      <result_data type="value" value="12"/>
      <result_data type="value" value="15"/>
   </result>
  </results>
</sample>

到目前为止,我所做的是:

import os, os.path, sys
import glob
from xml.etree import ElementTree

def run(files):
    xml_files = glob.glob(files +"/*.xml")
    xml_element_tree = None
    for xml_file in xml_files:
        # get root
        data = ElementTree.parse(xml_file).getroot()
        # print ElementTree.tostring(data)
        for result in data.iter('result'):
            if xml_element_tree is None:
                xml_element_tree = data 
            else:
                xml_element_tree.extend(result) 
    if xml_element_tree is not None:
        print ElementTree.tostring(xml_element_tree)

如您所见,我将初始xml_element_tree分配给具有标题等的数据,然后使用“结果”扩展。但是,这给了我这个:

<sample id="1">
<workflow value="x" version="1"/>
  <results>
   <result type="T">
      <result_data type="value" value="19"/>
      <result_data type="value" value="15"/>
      <result_data type="value" value="14"/>
      <result_data type="value" value="13"/>
      <result_data type="value" value="12"/>
   </result>
  </results>
   <result_data type="value" value="11"/>
      <result_data type="value" value="21"/>
      <result_data type="value" value="13"/>
      <result_data type="value" value="12"/>
      <result_data type="value" value="15"/>
   </result>
</sample>

结果需要放在底部。任何帮助将不胜感激。


问题答案:

虽然这大部分是重复的,并且可以在这里找到答案,但我已经做到了,因此我可以共享此python代码:

import os, os.path, sys
import glob
from xml.etree import ElementTree

def run(files):
    xml_files = glob.glob(files +"/*.xml")
    xml_element_tree = None
    for xml_file in xml_files:
        data = ElementTree.parse(xml_file).getroot()
        # print ElementTree.tostring(data)
        for result in data.iter('results'):
            if xml_element_tree is None:
                xml_element_tree = data 
                insertion_point = xml_element_tree.findall("./results")[0]
            else:
                insertion_point.extend(result) 
    if xml_element_tree is not None:
        print ElementTree.tostring(xml_element_tree)

但是,此问题包含另一个帖子中未提到的另一个问题。示例XML文件不是有效的XML,因此不可能具有带有以下内容的XML标签:

<sample="1">
    ...
</sample>

不可能更改为以下内容:

<sample id="1">
    ...
</sample>


 类似资料:
  • 问题内容: 我正在尝试开发简单的Python(3.2)代码以读取XML文件,进行一些 更正 并将其存储回去。但是,在存储步骤中,ElementTree添加此命名空间命名法。例如: 该代码段如下: 我尝试使用,但没有任何积极结果。此版本的ElementTree 1.3是否有任何特定更改? 问题答案: 为了避免使用前缀,应 在 读取XML数据 之前 设置默认名称空间。

  • 我有一个包含数万个XML文件(小文件)的语料库,我正在尝试使用Python并提取其中一个XML标记中包含的文本,例如,body标记之间的所有内容,例如: 然后编写一个包含此字符串的文本文档,然后向下移动XML文件列表。 我正在使用effbot的ELementTree,但找不到正确的命令/语法来做到这一点。我找到了一个使用迷你DOM的dom.getElementsByTagName的网站,但我不确定

  • 本文向大家介绍Python中使用ElementTree解析XML示例,包括了Python中使用ElementTree解析XML示例的使用技巧和注意事项,需要的朋友参考一下 【XML基本概念介绍】 XML 指可扩展标记语言(eXtensible Markup Language)。 XML 被设计用来传输和存储数据。 概念一: 概念二: 概念三: 概念四: 概念五: 概念六: 【XML几种解析方法】

  • 问题内容: 我正在尝试合并两个xml文件,如下所示,但我无法获得所需的输出,请帮助我,谢谢 Java代码: File1.xml File2.xml 电流输出: 预期产量: 问题答案: 为了自己做。您应该执行以下操作: testFinal.xml的最终输出: 如你所愿;-) 希望能帮助到你,

  • 我正在尝试合并两个xml文件,如下所示,但我无法获得所需的输出,请帮助我,谢谢 Java代码: 文件1.xml File2.xml 电流输出: 预期输出:

  • 问题内容: 我很难找到一个很好的基本示例,说明如何使用元素树在python中解析XML。据我所知,这似乎是用于解析XML的最简单的库。这是我正在使用的XML的示例: 我可以使用硬编码的方法来做我需要的事情。但是我需要我的代码更具动态性。这是起作用的: 这是我尝试过的几件事,但都没有奏效,报告他们找不到timeSeries(或我尝试过的其他任何东西): 基本上,我想加载xml文件,搜索timeSer