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

Работает отлично! Спасибо. –

Смежные вопросы