Получить узлы с уникальным значением атрибута

Я хочу очистить файл 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?


person André    schedule 29.09.2013    source источник
comment
По какому правилу хранить foo узел? Последний раз видели?   -  person Tim Cooper    schedule 29.09.2013
comment
@TimCooper да, но в худшем случае я могу оставить первый.   -  person André    schedule 29.09.2013


Ответы (1)


Попробуйте следовать xpath

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

Я не очень много тестировал, так как вы предоставили только несколько тестовых данных, но я думаю, что это может сработать.

person Jirka Š.    schedule 29.09.2013
comment
Работает идеально! Спасибо. - person André; 29.09.2013