2013-09-29 60 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

完美的作品!謝謝。 –

相關問題