Python:从XML文件中查找和删除子级并将其输出到新文件

用户名

我在下面有一个XMl文件。我希望能够删除所有未称为john的孩子计划,并输出到新文件。

    <data>
        <plan_main>
            <plan>
               <name>John</name>
               <id>1</id>
            </plan>
            <plan>
               <name>Charlie</name>
               <id>2</id>
            </plan>
         </plan_main>
       <location>
            <country>
               <code>GB</code>
            </country>
            <country>
               <code>DE</code>
            </country>
       </location>
    </data>

我试过下面的代码,但列表中出现ValueError错误

for plan in root.findall('./plan_main/plan'):
  name = plan.find('name').text
  if name =! "john":
    root.remove(plan)

tree.write('output.xml')

我希望我的输出文件如下所示:

       <data>
        <plan_main>
            <plan>
               <name>John</name>
               <id>1</id>
            </plan>
         </plan_main>
       <location>
            <country>
               <code>GB</code>
            </country>
            <country>
               <code>DE</code>
            </country>
       </location>
    </data>

但是我收到以下错误:

     ValueError: list.remove(x): x not in list
阿南德·库玛(Anand S Kumar)

假设=!仅仅是复制/粘贴错误。问题在于,您正在尝试root使用Element.remove()method节点中.remove()删除元素,但仅当元素是的直接子元素时才删除它们root

如果要使用ElementTree自身,可以更改XPath以遍历所有plan_main元素,然后为每个plan_main元素遍历其所有子元素,如果没有任何子元素名称john,则将其删除。例子-

for plan_main in root.findall('./plan_main'):
    for plan in plan_main:
        name = plan.find('name').text
        if name.lower() != "john":
            plan_main.remove(plan)

演示-

>>> import xml.etree.ElementTree as ET
>>> s = """    <data>
...         <plan_main>
...             <plan>
...                <name>John</name>
...                <id>1</id>
...             </plan>
...             <plan>
...                <name>Charlie</name>
...                <id>2</id>
...             </plan>
...          </plan_main>
...        <location>
...             <country>
...                <code>GB</code>
...             </country>
...             <country>
...                <code>DE</code>
...             </country>
...        </location>
...     </data>"""
>>> root = ET.fromstring(s)
>>> for plan_main in root.findall('./plan_main'):
...     for plan in plan_main:
...         name = plan.find('name').text
...         if name.lower() != "john":
...             plan_main.remove(plan)
...
>>> print(ET.tostring(root).decode('utf-8'))
<data>
        <plan_main>
            <plan>
               <name>John</name>
               <id>1</id>
            </plan>
            </plan_main>
       <location>
            <country>
               <code>GB</code>
            </country>
            <country>
               <code>DE</code>
            </country>
       </location>
    </data>

如果可以使用lxml.etree,则可以通过使用.getparent()方法获取要删除的孩子的直接父母,从而对代码进行少量更改以使其正常工作例子 -

for plan in root.findall('./plan_main/plan'):
    name = plan.find('name').text
        if name.lower() != "john":
            plan.getparent().remove(plan)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在每行中搜索多个模式并将其输出到新文件中

来自分类Dev

如何使用Python删除部分XML数据并将其写入新文件

来自分类Dev

连接特定行并将结果输出到新文件中

来自分类Dev

查找包含特定字符串的行并将其添加到新文件中

来自分类Dev

删除find输出中的所有目录,并将输出重定向到新文件

来自分类Dev

如何依次读取两个txt文件并将其写入python中的新文件?

来自分类Dev

重击:读入文件,编辑行,输出到新文件

来自分类Dev

如何加载文件中的每个图像并将它们转换为二维数组,然后将其导出到新文件夹?

来自分类Dev

查找和更新文件中的电子邮件

来自分类Dev

使用 int (python) 读取日志数据的二进制文件并输出到新文件

来自分类Dev

如何复制文件内容并将其连接到新文件中?

来自分类Dev

尝试按字母顺序对 txt 文件进行排序并将其保存到新文件中

来自分类Dev

在python目录中查找最新文件

来自分类Dev

如何使用Python在目录中查找最新文件

来自分类Dev

从特定的CSV列计算并输出到新文件

来自分类Dev

使用打印功能输出到新文件

来自分类Dev

Python ssh查找最新文件

来自分类Dev

识别FTP中的新文件并将其写入AWS S3

来自分类Dev

复制具有特定字符的行并将其粘贴到新文件中

来自分类Dev

批处理文件:从日志文件中读取最后几行并将其复制到新文件中

来自分类Dev

批处理文件:从日志文件中读取最后几行并将其复制到新文件中

来自分类Dev

按行比较两个文件,使用python 3.5将每个行的差异输出到新文件中的新行

来自分类Dev

比较python中的两个文件并将行差异保存在新文件中

来自分类Dev

查找最新文件

来自分类Dev

循环执行excel文件,然后将其保存到新文件夹python pandas中

来自分类Dev

循环执行excel文件,然后将其保存到新文件夹python pandas中

来自分类Dev

c#从许多文件中读取并将其中一部分写入新文件

来自分类Dev

如何存储“ git pull”的输出,而不删除文件,数字和重复项,以便在文本文件中列出新文件?

来自分类Dev

查找样式并将其从所有文件中删除

Related 相关文章

  1. 1

    在每行中搜索多个模式并将其输出到新文件中

  2. 2

    如何使用Python删除部分XML数据并将其写入新文件

  3. 3

    连接特定行并将结果输出到新文件中

  4. 4

    查找包含特定字符串的行并将其添加到新文件中

  5. 5

    删除find输出中的所有目录,并将输出重定向到新文件

  6. 6

    如何依次读取两个txt文件并将其写入python中的新文件?

  7. 7

    重击:读入文件,编辑行,输出到新文件

  8. 8

    如何加载文件中的每个图像并将它们转换为二维数组,然后将其导出到新文件夹?

  9. 9

    查找和更新文件中的电子邮件

  10. 10

    使用 int (python) 读取日志数据的二进制文件并输出到新文件

  11. 11

    如何复制文件内容并将其连接到新文件中?

  12. 12

    尝试按字母顺序对 txt 文件进行排序并将其保存到新文件中

  13. 13

    在python目录中查找最新文件

  14. 14

    如何使用Python在目录中查找最新文件

  15. 15

    从特定的CSV列计算并输出到新文件

  16. 16

    使用打印功能输出到新文件

  17. 17

    Python ssh查找最新文件

  18. 18

    识别FTP中的新文件并将其写入AWS S3

  19. 19

    复制具有特定字符的行并将其粘贴到新文件中

  20. 20

    批处理文件:从日志文件中读取最后几行并将其复制到新文件中

  21. 21

    批处理文件:从日志文件中读取最后几行并将其复制到新文件中

  22. 22

    按行比较两个文件,使用python 3.5将每个行的差异输出到新文件中的新行

  23. 23

    比较python中的两个文件并将行差异保存在新文件中

  24. 24

    查找最新文件

  25. 25

    循环执行excel文件,然后将其保存到新文件夹python pandas中

  26. 26

    循环执行excel文件,然后将其保存到新文件夹python pandas中

  27. 27

    c#从许多文件中读取并将其中一部分写入新文件

  28. 28

    如何存储“ git pull”的输出,而不删除文件,数字和重复项,以便在文本文件中列出新文件?

  29. 29

    查找样式并将其从所有文件中删除

热门标签

归档