我具有以下XML结构
<GAMES>
<GAME>
<ID>1</ID>
<NAME>A Game</NAME>
<ELEMENTS>
<ELEMENT>
<SOMEVALUE>true</SOMEVALUE>
</ELEMENT>
<ELEMENT>
<SOMEVALUE>false</SOMEVALUE>
</ELEMENT>
</ELEMENTS>
</GAME>
<GAME>
<ID>2</ID>
<NAME>Another game</NAME>
<ELEMENTS>
<ELEMENT>
<SOMEVALUE>true</SOMEVALUE>
</ELEMENT>
<ELEMENT>
<SOMEVALUE>true</SOMEVALUE>
</ELEMENT>
</ELEMENTS>
</GAME>
</GAMES>
我想选择所有值为SOMEVALUE
为真的游戏。因此,在上面的示例中,我想获得:
<GAME>
<ID>2</ID>
<NAME>Another game</NAME>
<ELEMENTS>
<ELEMENT>
<SOMEVALUE>true</SOMEVALUE>
</ELEMENT>
<ELEMENT>
<SOMEVALUE>true</SOMEVALUE>
</ELEMENT>
</ELEMENTS>
</GAME>
我在此查询中尝试过,但没有成功
let $db := db:open("game")/GAMES
let $games := $db/GAME[data(ELEMENTS/ELEMENT/SOMEVALUE) = 'true']
return $games
有解决方案吗?而且,那里有一个很好的资源,可以使用XQuery进行操作。我发现的所有内容都没有得到充分的记录或没有示例
答案 0 :(得分:3)
您的口头描述“选择所有具有SOMEVALUE均为真的值的游戏”,根据我的理解,翻译为
/GAMES/GAME[every $value in ELEMENTS/ELEMENT/SOMEVALUE satisfies $value = 'true']
https://xqueryfiddle.liberty-development.net/nbUY4kk
关于文档,请阅读规格:https://www.w3.org/TR/xquery-31/,https://www.w3.org/TR/xpath-functions/
答案 1 :(得分:0)
尝试:
let $db := db:open("game")/GAMES
let $games := $db/GAME[ELEMENTS/ELEMENT/SOMEVALUE = 'true']
return $games
您不需要data()函数。
答案 2 :(得分:0)
我不知道您使用的XQuery是什么,但是我希望这些变体之一可以解决问题:
let $games := $db/GAME[data(./ELEMENTS/ELEMENT/SOMEVALUE) = 'true']
let $games := $db/GAME[./ELEMENTS/ELEMENT/SOMEVALUE/string() = 'true']
let $games := $db/GAME[compare(./ELEMENTS/ELEMENT/SOMEVALUE/string(),'true') = 0]
我非常重视XQuery wikibook作为第一次学习XQuery的资源。