2015-01-09 3 views
0

Могу ли я сделать значение в запросе XPath другим выражением XPath? (Надеясь это возможно)Возможно ли оценить значение в выражении xpath?

Вот упрощенная версия того, что я пытаюсь сделать: Допустим, у меня есть структуру XML, как это:

<person> 
    <info> 
    <name>Bob</name> 
    <primary_residence>2</primary_residence> 
    </info> 
    <residences> 
    <residence> 
     <rid>1</rid> 
     <name>New York</name> 
    </residence> 
    <residence> 
     <rid>2</rid> 
     <name>London</name> 
    </residence> 
    </residences> 
</person> 

я хотел бы получить имя из "основная резиденция". Я хотел бы сделать что-то вроде:

/person/residences/residence[rid=XXX]/name 

И затем, в том, что использовать «XXX», который выглядит примерно так:

/person/info/primary_residence 

Таким образом, все вместе будет выглядеть примерно так:

/person/residences/residence[rid=/person/info/primary_residence]/name 

Однако, похоже, что это не сработало (если только я не ошибаюсь).

Любые идеи?

+1

"Это не похоже на работу" - он должен работать нормально, что именно происходит не так? У вас нет результатов или слишком много? –

ответ

1

Это будет работать с любыми версиями XPath:

'/person/residences/residence[rid=/person/info/primary_residence]/name' 

Так что ваше выражение справедливо. Какова ваша среда программирования/язык программирования?


с XPath 3.0 (или XQuery 1.0 или выше):

let $r := /person/info/primary_residence 
return /person/residences/residence[rid=$r]/name 
+1

Несколько разъяснений. Первое решение будет работать с ANY XPath; и parentehse не нужны. Второе решение фактически требует XPath 3.0 (или XQuery 1.0 или выше). –

+0

Спасибо за объяснения Майкл Кей. –

+0

Зачем вам ожидать, что 'text()' будет иметь значение? Выражение OP должно работать корректно как есть, сравнивая строковое значение элемента 'rid' с элементом' primary_residence' –

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