2013-06-17 4 views
3

Мне нужно, чтобы добраться до первого узла в этой XML-структуры, чтобы внести некоторые изменения:выбор XPath узлов, которые не имеют специфический дополнительный атрибут

<root-node> 
    <child mandatory="val"> 
     ... 
    </child> 
    <child mandatory="val" optional1="opt1"> 
     ... 
    </child> 
    <child mandatory="val" optional1="opt2" optional2="opt3"> 
     ... 
    </child> 
</root-node> 

Обратите внимание, что все дети имеют обязательный атрибут, который имеет одинаковое значение во всех случаях, плюс один или несколько необязательных атрибутов. Но если я делаю XPath на //root-node/child[@mandatory='val'], я беспокоюсь, что могу получить ссылку на другие узлы, которые я не хочу трогать.

Есть ли способ быть более конкретным и исключать узлы с определенным атрибутом, присутствующим в их структуре?

ответ

5

После XPath возвратит child элементы, которые имеют mandatory атрибут равным val и не имеют optional1 атрибут определен:

//child[@mandatory='val' and not(@optional1)] 

Если вам нужен только первый элемент, то просто добавьте [1] к выражению:

root-node/child[@mandatory='val' and not(@optional1)][1] 
+1

Спасибо за быстрый ответ. Попробует. –

+0

Работал как шарм! –

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