我有一个XML文件,我想根据条件从中删除元素。但是,XML文件的名称空间由于某些不清楚的原因不允许我执行所描述的过程:1、2、3、4和5。你知道吗
我的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)
抛出“xpathevaleror:无效表达式”
那么,从这个XML文件中删除Unicode标记为空的所有节点的最简单方法是什么(以及如何找到它们?)?你知道吗
谢谢。你知道吗
首先,您的xml缺少
<TextLine custom="readingOrder {index:1;}" id="Ad0010100l2">
的结束标记,但是如果您将其插入适当的位置,那么以下内容应该可以帮助您:输出:
我终于找到了解决问题的办法。你知道吗
这个想法来自Remove xml nodes without child nodes using python
相关问题 更多 >
编程相关推荐