2013-09-29 38 views
1

我想清理XML文件,并且不允许节点具有相同值的属性。该XML的样子:获取具有唯一属性值的节点

<bar> 
    <foo id="123" some="attribute"/> 
    <foo id="abc" some="other attribute"/> 
    <foo id="123" some="different attribute"/> 
</bar> 

,它应该是这样的:

<bar> 
    <foo id="abc" some="other attribute"/> 
    <foo id="123" some="different attribute"/> 
</bar> 

我使用PHP,但我不想让许多循环,所以我想用用的XPath请求DOMXPath对象。 我发现Xpath 不同值函数可以帮助,但据我了解,它只适用于重复节点,不适用于节点重复属性。

在XPath中有没有解决方案,甚至是PHP中的一个很好的算法?

+1

“foo”节点保留的规则是什么?最后一个看到? –

+0

@TimCooper是的,但在最坏的情况下,我可以保留第一个。 –

回答

2

尝试下面的XPath

/bar/foo[not(@id = following-sibling::foo/@id)] 

我没有测试它,因为你只提供了一些测试数据,但我认为它可以工作非常多。

+0

完美的作品!谢谢。 –

相关问题