gpt4 book ai didi

python - 如何使用 Python 按条件查找和删除 XML 文件(带有 namespace )中的元素

转载 作者:行者123 更新时间:2023-12-01 07:05:14 25 4
gpt4 key购买 nike

我有一个 XML 文件,我想根据条件从中删除元素。但是,XML 文件的命名空间由于某些不清楚的原因不允许我执行所描述的过程:1 , 2 , 3 , 45 .

我的 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>

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

    <?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 标记为空的所有节点的最简单方法是什么(以及如何找到它们?)?

谢谢。

最佳答案

首先,您的 xml 缺少 <TextLine custom="readingOrder {index:1;}" id="Ad0010100l2"> 的结束标记,但是如果您将其插入到适当的位置,则以下内容应该可以帮助您到达那里:

my_xml = """[your xml above, corrected]"""
data = ET.XML(my_xml.encode('ascii'))
for target in data.xpath("//*[local-name() = 'Unicode'][not(text())]"):
target.getparent().remove(target)

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

输出:

    <?xml version=\'1.0\' encoding=\'ASCII\'?>\n
<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/>
</TextLine>
</TextRegion>
</Page>
</PcGts>

关于python - 如何使用 Python 按条件查找和删除 XML 文件(带有 namespace )中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58472401/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com