2013-12-17 30 views
2

我有這樣的xml數據文件。XQuery列表節點包含所有屬性

<info> 
    <property id="p1" type="land"> 
    <name>Time Square</name> 
    <owner type="person" id="x01" /> 
    <owner type="company" id="x01" /> 
    </property> 
    <property id="p2" type="building"> 
    <name>HBE Complex</name> 
    <owner type="company" id="x01" /> 
    <owner type="company" id="x02" /> 
    <owner type="person" id="x02" /> 
    </property> 
    <property id="p3" type="land"> 
    <name>UNE Home</name> 
    <owner type="company" id="x02" /> 
    <owner type="person" id="x02" /> 
    </property> 
    <!-- more properties --> 
</info> 

我想列出所有公司的所有類型的財產。 例如公司id = x02,有土地和建築物。

現在,我不知道如何編寫它,但我覺得可能不得不使用every in satisfies來檢查每個元素。如果我找出更多,我會更新我的代碼。

是否有任何想法查找跨元素的屬性。

回答

2

找到所有不同的公司ID,併爲他們每個查找所有屬性,看看是否有兩種類型的建築和土地。

for $id in distinct-values(//owner[@type='company']/@id) 
let $properties := //property[owner[@type='company' and @id=$id]] 
where $properties/@type='land' and $properties/@type='building' 
return $id 

satisfies實現了一種隱式循環。你永遠不需要它,但有時候會導致更多可讀的代碼。你可以使用satisfies例如像這樣:

(: snip :) 
where every $type in ('land', 'building') satisfies $properties/@type=$type 
(: snip :) 

這將是特別感興趣的,如果你有比這一套物業類型對證的多。

相關問題