gpt4 book ai didi

xquery - Marklogic 6如何使用xquery获取属性值?

转载 作者:行者123 更新时间:2023-12-02 08:06:20 24 4
gpt4 key购买 nike

XML:1

<?xml version="1.0" encoding="UTF-8"?>
<PE uri="/MY/Cases/ILJ/ilj2010_1_00042.xml">
<P name="antony" value="cse"/>
<P name="type" value="reported"/>
<P name="year" value="2010"/>
<P name="part" value="1"/>
<P name="volume" value="2"/>
<P name="decdate-year" value="2010"/>
<P name="decdate-month" value="01"/>
<P name="decdate-day" value="27"/>
</PE>

XML:2

<?xml version="1.0" encoding="UTF-8"?>    
<PE uri="/MY/Cases/ILJ/ilj2010_1_00042.xml">
<P name="antony" value="cse"/>
<P name="type" value="reported"/>
<P name="year" value="2010"/>
<P name="part" value="1"/>
<P name="volume" value="1"/>
<P name="decdate-year" value="2010"/>
<P name="decdate-month" value="01"/>
<P name="decdate-day" value="27"/>
</PE>

我使用下面的 Xquery 来区分多个 xml。但我没有得到确切的输出。这里我的问题是如何过滤具有多个属性的元素? 我想获取 Volume =2 的结果,这意味着它应该只返回第一个 xml。

我的查询

xquery version "1.0-ml";
declare namespace xs = "http://www.w3.org/2001/XMLSchema";

let $value1 := "antony"
let $value2 := "cse"
let $value3 := "year"
let $value4 := "2010"
let $value5 := "volume"
let $value6 := "2"
let $value7 := "part"
let $value8 := "1"

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),
cts:element-attribute-value-query(xs:QName("P"),xs:QName("name"),$value3),
cts:element-attribute-value-query(xs:QName("P"),xs:QName("value"),$value4),
cts:element-attribute-value-query(xs:QName("P"),xs:QName("name"),$value5),
cts:element-attribute-value-query(xs:QName("P"),xs:QName("value"),$value6),
cts:element-attribute-value-query(xs:QName("P"),xs:QName("name"),$value7),
cts:element-attribute-value-query(xs:QName("P"),xs:QName("value"),$value8)

))
)) )

return doc($uri1)

最佳答案

最好的方法是更改​​ XML 表示形式,并使用元素或属性名称而不是属性值来体现模型的语义,如下所示:

<pe>
<type>reported</type>
<part>1</part>
<volume>1</volume>
<date>2010-01-27</date>
</pe>

然后查询就变成如下所示:

cts:element-query(xs:QName("pe"), (
cts:element-value-query(xs:QName("type"),"reported"),
cts:element-value-query(xs:QName("part"),"1"),
cts:element-value-query(xs:QName("volume"),"1"),
cts:element-value-query(xs:QName("date"),"2010-01-27")
))

此方法还允许您在值上创建有用的范围索引或路径范围索引。

希望有帮助,

关于xquery - Marklogic 6如何使用xquery获取属性值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36663386/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com