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

使用python删除XML中的子元素

左丘积厚
2023-03-14
问题内容

Python 3.2.5 x64 ElementTree

我有需要使用python格式化的数据。本质上,我具有包含元素和子元素的文件。我需要删除其中一些元素的子元素。我已经检查了先前的问题,但无法解决。到目前为止,我拥有的最好的功能只是删除了每个第二子元素。

样本数据:

<Leg1:MOR oCount="7" xmlns:Leg1="http://what.not">
    <Leg1:Order>
        <Leg1:CTemp id="FO">
            <Leg1:Group bNum="001" cCount="4">
                <Leg1:Dog ndate="112" pdate="111"/>
                <Leg1:Dog ndate="122" pdate="121"/>
                <Leg1:Dog ndate="132" pdate="131"/>
                <Leg1:Dog ndate="142" pdate="141"/>
            </Leg1:Group>
                <Leg1:Group bNum="002" cCount="4">
                <Leg1:Dog ndate="112" pdate="111"/>
                <Leg1:Dog ndate="122" pdate="121"/>
                <Leg1:Dog ndate="132" pdate="131"/>
                <Leg1:Dog ndate="142" pdate="141"/>
            </Leg1:Group>
        </Leg1:CTemp>
        <Leg1:CTemp id="GO">
            <Leg1:Group bNum="001" cCount="4">
                <Leg1:Dog ndate="112" pdate="111"/>
                <Leg1:Dog ndate="122" pdate="121"/>
                <Leg1:Dog ndate="132" pdate="131"/>
                <Leg1:Dog ndate="142" pdate="141"/>
            </Leg1:Group>
            <Leg1:Group bNum="002" cCount="4">
                <Leg1:Dog ndate="112" pdate="111"/>
                <Leg1:Dog ndate="122" pdate="121"/>
                <Leg1:Dog ndate="132" pdate="131"/>
                <Leg1:Dog ndate="142" pdate="141"/>
            </Leg1:Group>
        </Leg1:CTemp>
    </Leg1:Order>
</Leg1:MOR>

我需要的输出看起来像:

<Leg1:MOR oCount="7" xmlns:Leg1="http://what.not">
    <Leg1:Order>
        <Leg1:CTemp id="FO">
            <Leg1:Group bNum="001" cCount="10"/>
            <Leg1:Group bNum="002" cCount="10"/>
        </Leg1:CTemp>
        <Leg1:CTemp id="GO">
            <Leg1:Group bNum="001" cCount="10"/>
            <Leg1:Group bNum="002" cCount="10"/>
        </Leg1:CTemp>
    </Leg1:Order>
</Leg1:MOR>

我有一段时间没有写任何东西了,我的代码也没用。我可以解析文件,然后将其写入,但我无法正确处理。

import xml.etree.cElementTree as ET
tree = ET.parse("input.xml")
root = tree.getroot()
for x in root.findall('./Order/CTemp/Group'):
    root.remove(x)
tree.write("output.xml")

我如何删除元素的DogCTemp元素?


问题答案:

如果可以使用lxml,请尝试以下操作:

import lxml.etree

tree = lxml.etree.parse("leg.xml")
for dog in tree.xpath("//Leg1:Dog",
                      namespaces={"Leg1": "http://what.not"}):
    parent = dog.xpath("..")[0]
    parent.remove(dog)
    parent.text = None
tree.write("leg.out.xml")

现在leg.out.xml看起来像这样:

<?xml version="1.0"?>
<Leg1:MOR xmlns:Leg1="http://what.not" oCount="7">
  <Leg1:Order>
    <Leg1:CTemp id="FO">
      <Leg1:Group bNum="001" cCount="4"/>
      <Leg1:Group bNum="002" cCount="4"/>
    </Leg1:CTemp>
    <Leg1:CTemp id="GO">
      <Leg1:Group bNum="001" cCount="4"/>
      <Leg1:Group bNum="002" cCount="4"/>
    </Leg1:CTemp>
  </Leg1:Order>
</Leg1:MOR>


 类似资料:
  • 问题内容: 我陷入了XML和Python的困境。任务很简单,但到目前为止我还无法解决,花了那么长时间。我是来这里咨询如何用几行解决它的。 感谢您对遍历树的任何帮助。我总是以太多或太少的元素结束。元素可以无限制地嵌套。给出的例子只是一个例子。我会接受任何解决方案,而不是对dom,minidom,sax等等不挑剔。 我有一个与此类似的XML文件: 我需要的是-解析XML并编写一个新文件。新文件应包含给

  • 这是我的XML文件 我只想从xml中删除第二个选项 我的java代码从我的选项元素中删除所有选项。使用

  • 我正在尝试从xml文件中删除元素和子元素。特别是附加名称Testlog。 首先这是我的xml文件的外观。 以下是我的java代码: 我想删除此appender的所有内容,但引发了一个异常。可能是我错过了一些简单的东西。 有什么想法吗?

  • 问题内容: 这是我的xml文件。 我想删除名称为“ ”的节点。如何从xml中删除该特定节点。 我写的代码如下。 问题答案: 我得到了答案。 实际上,我是从xml文件中删除该节点,但没有将其写入xml文件中。 我缺少以下部分 经过长时间的代码研究,我发现了这个愚蠢的错误,因此我纠正了它。 无论如何,谢谢您的回复。

  • 问题内容: 我有一个非常大的.xml文件,我正在尝试制作一个新的.xml文件,该文件只包含了该较大文件内容的一小部分。我想指定一个属性(在我的情况下为itemID),并为其指定一些特定的值,然后它将除去所有具有那些itemID及其子元素的元素。 我的大型.xml文件如下所示: 该文件大约有9万行,大约9兆字节。 注意如何有itemID,某些项目类型可以(但不总是)在其中包含更多项目,并且这些子项也

  • 问题内容: 我已经从Excel数据库中生成了一个xml文件,它自动包含一个名为“ ” 的元素。为了使新文件符合我的需求,我想使用java删除此元素。这是xml内容: 我编写了一个代码来读取(使用缓冲的读取器)并将内容写入新文件中,并在以下情况下使用该条件: 但这不起作用 问题答案: 我个人建议使用适当的XML解析器(如Java DOM)来检查和删除您的节点,而不是将XML作为原始对象处理(糟糕)。