2011-02-22 5 views
0

Я хотел бы выбрать узел покупки с атрибутом pgnr, который имеет значение из другого атрибута pgnr, startig с «KEY», объединенным с «c».Как выбрать узел, на который ссылается другой узел с XPath?

Пример:

<root> 
<purchact hhid="xxx"> 
    <purchase pgnr="41"> 
    <purchvalues field_name="Number" field_value="1"/> 
    </purchase> 
    <purchase pgnr="KEY9802"> 
    <purchvalues field_name="Number" field_value="2"/> 
    </purchase> 
<purchase pgnr="9802c"> 
    <purchvalues field_name="Number" field_value="3"/> 
    </purchase> 
</purchact> 
</root> 

В этом случае, я ищу для покупки-узла с pgnr атрибутом «9802c», так как покупка-узел с pgnr-атрибута, начиная с «KEY» имеет как следующие символы «9802».

Я попытался

root/purchact/purchase[@pgnr=concat(substring-after(@pgnr, "KEY"), "c")] 

, но он не работает.

Помочь ли кто-нибудь? Спасибо!

+0

Проверьте мой ответ, что он правильно выбирает все нужные элементы. –

ответ

1
root/purchact/purchase[ 
    @pgnr = concat(
     substring-after(
      ../purchase[ 
       contains(@pgnr, 'KEY') 
       ]/@pgnr, 
      'KEY' 
      ) 
     , 'c') 
    ] 
+0

Вот и все. Большое спасибо! – Guenter

+0

@Guenter, не забудьте принять и перенести ответ тогда. Пожалуйста. – Flack

+0

Извините, я новичок здесь. Принято, но не удалось повысить из-за небольшой репутации – Guenter

2

Это XPath-выражение:

root/purchact/purchase[ 
    @pgnr[substring(.,string-length()) = 'c'] 
][ 
    concat(
     'KEY', 
     substring-before(
     @pgnr, 
     'c' 
    ) 
    ) = ../purchase/@pgnr 
] 

Значение: purchase элемент, имеющий @pgnr атрибут, заканчивающийся 'c' и которым есть по крайней мере один другой @pgnr атрибут принадлежности к сиблинговой purchase элемента и будучи равным конкатенации 'KEY' и строкой данных @pgnr до 'c'.

+0

+1 для лучшего ответа. – Flack

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