XML:1
<a href="#/newspost">New Post</a>
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="2"/>
<P name="decdate-year" value="2010"/>
<P name="decdate-month" value="01"/>
<P name="decdate-day" value="27"/>
</PE>
我使用下面的Xquery来区分多个xml。但我没有得到确切的输出。这里我的问题是如何过滤具有多个属性的元素? 我想得到Volume = 2的结果意味着它应该只返回第一个xml。
我的查询
<?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>
答案 0 :(得分:1)
最好的方法是更改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")
))
此方法还允许您在值上创建有用的范围索引或路径范围索引。
希望有帮助,
答案 1 :(得分:0)
对于每个名称/值属性对,使用cts:element-query()
指定P元素,cts:and-query()
包含cts:element-attribute-value-query()
条件,用于该特定P元素的两个属性。
这将确保必须满足同一P元素上的两个属性的标准,而不仅仅是测试以确保在文档中的任何位置都存在具有该值的属性。
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-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-query(xs:QName("P"), cts:and-query((
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-query(xs:QName("P"), cts:and-query((
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-query(xs:QName("P"), cts:and-query((
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)
cts:element-query()
搜索 对于指定元素及其所有后代中的匹配项。如果 第二个参数中的指定查询有任何 cts:element-attribute - * - 查询构造函数,它将搜索属性 直接在任何后代的指定元素和属性上 元件。