如何在Python中按条件查找和删除XML文件中的元素(带有name_spaces)

它不燃烧

我有一个XML文件,希望根据条件从中删除元素。然而,XML文件的命名空间这对于一些不明原因不允许我执行的程序描述:12345

我的XML如下所示:

    <?xml version='1.0' encoding='UTF-8'?>
        <PcGts xmlns="http://schema.primaresearch.org/PAGE/gts/pagecontent/2013-07-15" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://schema.primaresearch.org/PAGE/gts/pagecontent/2013-07-15 http://schema.primaresearch.org/PAGE/gts/pagecontent/2013-07-15/pagecontent.xsd">
            <Page imageFilename="1.png">
                <TextRegion custom="a">
                    <TextLine custom="readingOrder {index:0;}" id="Ar0010001l1">
                        <TextEquiv>
                            <Unicode> abc </Unicode>
                        </TextEquiv>
                    </TextLine>
                    <TextLine custom="readingOrder {index:1;}" id="Ad0010100l2">
                        <TextEquiv>
                            <Unicode />
                        </TextEquiv>
                </TextRegion>
            </Page>
        </PcGts>

我的目标是清除“ Unicode”标签中没有文本的所有TextLine节点。因此输出将是:

    <?xml version='1.0' encoding='UTF-8'?>
        <PcGts xmlns="http://schema.primaresearch.org/PAGE/gts/pagecontent/2013-07-15" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://schema.primaresearch.org/PAGE/gts/pagecontent/2013-07-15 http://schema.primaresearch.org/PAGE/gts/pagecontent/2013-07-15/pagecontent.xsd">
            <Page imageFilename="1.png">
                <TextRegion custom="a">
                    <TextLine custom="readingOrder {index:0;}" id="Ar0010001l1">
                        <TextEquiv>
                            <Unicode> abc </Unicode>
                        </TextEquiv>
                    </TextLine>
                </TextRegion>
            </Page>
        </PcGts>

我尝试使用上面链接中的一些建议。但:

 import lxml.etree as ET
 data = ET.parse(file)
 root = data.getroot()
 for x in root.xpath("//Unicode"):
     print(x.text)

找不到任何标签。另一个尝试:

for x in root.xpath("//{http://schema.primaresearch.org/PAGE/gts/pagecontent/2013-07-15}Unicode"):
   print(x.text)

抛出“ XPathEvalError:无效的表达式”

那么,从此XML文件中删除所有Unicode标记为空的节点的最简单方法是什么(以及如何找到它们?)?

谢谢。

它不燃烧

好吧,我终于找到了解决问题的办法。

import lxml.etree as ET
my_xml = """...xml content..."""
data = ET.XML(my_xml.encode('UTF-8'))

#this loop remove "<Unicode />" tags.
for target in data.xpath("//*[local-name() = 'Unicode'][not(text())]"):
    target.getparent().remove(target)  

#and this loop remove nodes without children like "<TextEquiv><Unicode /></TextEquiv>" 
#(after the removing of "<Unicode />")
for el in data.iter():
    if len(list(el.iterchildren())) or ''.join([_.strip() for _ in el.itertext()]):
        pass
    else:
        parent = el.getparent()
        if parent is not None:
            parent.remove(el)
#and this loop remove nodes without children again, but now - it's "<TextLine>" tag
for el in data.iter():
    if len(list(el.iterchildren())) or ''.join([_.strip() for _ in el.itertext()]):
        pass
    else:
        parent = el.getparent()
        if parent is not None:
            parent.remove(el)

print(ET.tostring(data,  xml_declaration=True))

这个想法来自使用python删除没有子节点的xml节点

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何查找和删除文件名中带有回车符 (\r) 的文件?

来自分类Dev

如何在终端中按“错误”条件查找文件

来自分类Dev

如何在 sql 中为带有 field_name 元素中的列名和 field_value 元素中的列值的表创建 XML 路径?

来自分类Dev

如何使用jQuery查找名称中带有“:”的xml元素?

来自分类Dev

如何从 Oracle 表 clob 列中查找 xml 文件中所有元素和属性的列表?

来自分类Dev

如何在终端中查找带有特定文本的文件

来自分类Dev

python elementtree - 如何在xml中查找具有特定属性的所有元素

来自分类Dev

如何从SQL Server中的xml数据中获取带有条件的子元素和属性值?

来自分类Dev

如何在git中删除带有前缀“:”的文件

来自分类Dev

如何使用python和BeautifulSoup从xml中删除完整元素

来自分类Dev

如何在类python中按特定子字符串查找带有类字符串的span

来自分类Dev

如何在Python中删除带有字符的行

来自分类Dev

使用 Python 删除 XML 文件中的元素

来自分类Dev

如何在Haskell中查找和/或删除元组列表中的元素

来自分类Dev

如何在JAVA中编码默认名称空间和带有单个XML元素前缀的名称空间

来自分类Dev

如何在JAVA中编码默认名称空间和带有单个XML元素前缀的名称空间

来自分类Dev

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

来自分类Dev

如何在Selenium WebDriver for Java中按索引查找元素

来自分类Dev

如何在C#WebDriver中按类型查找元素?

来自分类Dev

如何在XSL中删除所有带有条件的空标签

来自分类Dev

Python Django。如何在name_znat字段中输入用户选择的带有下拉元素的文本

来自分类Dev

如何在xml文件中写入元素

来自分类Dev

如何在Python Selenium中按类名称及其文本查找元素

来自分类Dev

使用Python按属性查找ElementTree中的所有元素

来自分类Dev

删除geojson文件中带有for循环的元素

来自分类Dev

在xmlstarlet中删除具有多个条件的xml元素

来自分类Dev

如何从带有条件的文本文件中删除值

来自分类Dev

如何在Angular 2中获取带有模态对话框条件的元素?

来自分类Dev

如何在R中按条件删除单个值?

Related 相关文章

  1. 1

    如何查找和删除文件名中带有回车符 (\r) 的文件?

  2. 2

    如何在终端中按“错误”条件查找文件

  3. 3

    如何在 sql 中为带有 field_name 元素中的列名和 field_value 元素中的列值的表创建 XML 路径?

  4. 4

    如何使用jQuery查找名称中带有“:”的xml元素?

  5. 5

    如何从 Oracle 表 clob 列中查找 xml 文件中所有元素和属性的列表?

  6. 6

    如何在终端中查找带有特定文本的文件

  7. 7

    python elementtree - 如何在xml中查找具有特定属性的所有元素

  8. 8

    如何从SQL Server中的xml数据中获取带有条件的子元素和属性值?

  9. 9

    如何在git中删除带有前缀“:”的文件

  10. 10

    如何使用python和BeautifulSoup从xml中删除完整元素

  11. 11

    如何在类python中按特定子字符串查找带有类字符串的span

  12. 12

    如何在Python中删除带有字符的行

  13. 13

    使用 Python 删除 XML 文件中的元素

  14. 14

    如何在Haskell中查找和/或删除元组列表中的元素

  15. 15

    如何在JAVA中编码默认名称空间和带有单个XML元素前缀的名称空间

  16. 16

    如何在JAVA中编码默认名称空间和带有单个XML元素前缀的名称空间

  17. 17

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

  18. 18

    如何在Selenium WebDriver for Java中按索引查找元素

  19. 19

    如何在C#WebDriver中按类型查找元素?

  20. 20

    如何在XSL中删除所有带有条件的空标签

  21. 21

    Python Django。如何在name_znat字段中输入用户选择的带有下拉元素的文本

  22. 22

    如何在xml文件中写入元素

  23. 23

    如何在Python Selenium中按类名称及其文本查找元素

  24. 24

    使用Python按属性查找ElementTree中的所有元素

  25. 25

    删除geojson文件中带有for循环的元素

  26. 26

    在xmlstarlet中删除具有多个条件的xml元素

  27. 27

    如何从带有条件的文本文件中删除值

  28. 28

    如何在Angular 2中获取带有模态对话框条件的元素?

  29. 29

    如何在R中按条件删除单个值?

热门标签

归档