这是我的XML文件:它包含一个重复的元素<houseNum>0</houseNum>
。在
<?xml version="1.0" encoding="utf-8"?>
<ArrayOfHouse>
<XmlForm>
<houseNum>0</houseNum>
<plan1>
<coord>
<X> 1.2 </X>
<Y> 2.1 </Y>
<Z> 3.0 </Z>
</coord>
<color>
<R> 255 </R>
<G> 0 </G>
<B> 0 </B>
</color>
</plan1>
<plan2>
<coord>
<X> 21.2 </X>
<Y> 22.1 </Y>
<Z> 31.0 </Z>
</coord>
<color>
<R> 255 </R>
<G> 0 </G>
<B> 0 </B>
</color>
</plan2>
</XmlForm>
<XmlForm>
<houseNum>0</houseNum>
<plan1>
<coord>
<X> 1.2 </X>
<Y> 2.1 </Y>
<Z> 3.0 </Z>
</coord>
<color>
<R> 255 </R>
<G> 0 </G>
<B> 0 </B>
</color>
</plan1>
<plan2>
<coord>
<X> 21.2 </X>
<Y> 22.1 </Y>
<Z> 31.0 </Z>
</coord>
<color>
<R> 255 </R>
<G> 0 </G>
<B> 0 </B>
</color>
</plan2>
</XmlForm>
<XmlForm>
<houseNum>1</houseNum>
<plan1>
<coord>
<X> 11.2 </X>
<Y> 12.1 </Y>
<Z> 13.0 </Z>
</coord>
<color>
<R> 255 </R>
<G> 255 </G>
<B> 0 </B>
</color>
</plan1>
<plan2>
<coord>
<X> 211.2 </X>
<Y> 212.1 </Y>
<Z> 311.0 </Z>
</coord>
<color>
<R> 255 </R>
<G> 0 </G>
<B> 255 </B>
</color>
</plan2>
</XmlForm>
</ArrayOfHouse>
在我的例子中,有两种类型的重复:
1)如果重复的元素是连续的,这里是我删除重复元素的代码,我只比较元素[I]和元素[I+1],如果这些元素是[I].text==element[I+1].text,我删除元素[I+1]
^{pr2}$2)如果复制的元素不是连续的,我正在寻找一行工作来完成它。有什么帮助吗?
考虑一下XSLT,这是一种专门用来转换XML文件的语言(类似于使用SQL查询数据库)。而且因为您已经使用了Python的
lxml
,您可以无缝地运行这样一个脚本,而不需要一个for
循环或if
逻辑来删除文档中任何地方的重复。在具体地说,运行Muenchian Grouping(一种XSLT1.0方法),使用
<xsl:key>
通过houseNum索引XML文档,然后返回不同的分组。另一个好处是,下面的XSLT甚至可以用漂亮的打印缩进删除文本节点中的空白:XSLT(另存为.xsl文件,一个特殊的.xml文件)
Python
^{pr2}$输出
相关问题 更多 >
编程相关推荐