2015-01-09 106 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

「這似乎不工作」 - 它應該做工精細,到底是怎麼回事了?你沒有得到任何結果或太多? – 2015-01-10 11:27:35

回答

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

一些澄清。第一種解決方案將與任何XPath版本一起使用;和parentehse是不需要的。第二種解決方案實際上需要XPath 3.0(或XQuery 1.0或更高版本)。 – 2015-01-10 09:56:12

+0

感謝解釋邁克爾凱。 – 2015-01-10 10:53:37

+0

你爲什麼期望'text()'有所作爲? OP的表達式應該按原樣正確工作,比較rid元素的字符串值和primary_residence元素的字符串值。 – 2015-01-10 11:30:34