0

以下で説明する Xquery をクエリ コンソールで試してみましたが、コレクションからデータを検索する必要がありますか?

let $value1 := "antony"
let $value2 := "cse"
for $uri1 in cts:uris((),(), (  
    cts:element-query(xs:QName("P"),
      cts:and-query((
          cts:element-attribute-value-query(xs:QName("P"),xs:QName("name"),$value1),
          cts:element-attribute-value-query(xs:QName("P"),xs:QName("value"),$value2)
      ))
    )
))
let $xml := doc($uri1)
return $xml//PS/P [@name eq "volume"]/@value

上記の XQuery にコレクションを追加する方法を教えてください。

4

1 に答える 1

3

まず、最終的には URI ではなくドキュメントが必要なので、cts:search を直接使用する方が効果的です。フィルタリングのコストを回避したい場合は、「unfiltered」オプションを追加できます。次に例を示します。

let $value1  := "antony"
let $value2 := "cse"
return
cts:search( doc(), 
  cts:element-query(xs:QName("P"),
    cts:and-query((
      cts:element-attribute-value-query(xs:QName("P"),xs:QName("name"),$value1),
      cts:element-attribute-value-query(xs:QName("P"),xs:QName("value"),$value2)
    ))
  ), "unfiltered"
)//PS/P[@name eq "volume"]/@value

または、 /PS/P 要素のみを気にするため:

cts:search( doc()//PS/P, 
  cts:element-query(xs:QName("P"),
    cts:and-query((
      cts:element-attribute-value-query(xs:QName("P"),xs:QName("name"),"antony"),
      cts:element-attribute-value-query(xs:QName("P"),xs:QName("value"),"cse")
    ))
  ), "unfiltered"
)[@name eq "volume"]/@value

コレクション内を検索するには、doc() を collection("yourcollection") に置き換えます。

cts:search( collection("yourcollection")//PS/P, 
  cts:element-query(xs:QName("P"),
    cts:and-query((
      cts:element-attribute-value-query(xs:QName("P"),xs:QName("name"),"antony"),
      cts:element-attribute-value-query(xs:QName("P"),xs:QName("value"),"cse")
    ))
  ), "unfiltered"
)[@name eq "volume"]/@value
于 2016-04-07T14:52:24.297 に答える