XQuery:如何从标签中获取特定值?
XQuery: How to get a specific value out of a tag?
假设我们有这个 xml:
<question>
<test id="1">
<tag k="a" v="1"/>
<tag k="a" v="2"/>
<tag k="b" v="3"/>
</test>
<test id="2">
<tag k="a" v="1"/>
<tag k="a" v="4"/>
<tag k="b" v="5"/>
</test>
<test id="3">
<tag k="a" v="2"/>
<tag k="a" v="6"/>
<tag k="b" v="7"/>
</test>
</question>
我想 return 测试的所有值 v,如果 k = "a" AND v = "1",像这样:
v="3"
v="5"
到目前为止我的方法:
for $i in //test
where ($i/tag[@k = 'a' and @v = '1'])
return $i/tag/@v
但这不正确,因为那是 return:
v="1"
v="2"
v="3"
v="1"
v="4"
v="5"
感谢您的帮助:)
您可能正在寻找类似
的内容
for $i in //test
where ($i/tag[@k = 'a'][@v="1"])
return $i/tag[@k="b"]/@v
您的选择标准并不十分清楚,但returns您所期望的是:
for $i in //test
where $i/tag[@k = 'a' and @v = '1']
return $i/tag[not(@k = 'a' or @v = '1')]/@v
您可以简化并在单个 XPath 表达式中执行此操作:
//test/tag[@k = 'a' and @v = '1']/tag[not(@k = 'a' or @v = '1')]/@v
假设我们有这个 xml:
<question>
<test id="1">
<tag k="a" v="1"/>
<tag k="a" v="2"/>
<tag k="b" v="3"/>
</test>
<test id="2">
<tag k="a" v="1"/>
<tag k="a" v="4"/>
<tag k="b" v="5"/>
</test>
<test id="3">
<tag k="a" v="2"/>
<tag k="a" v="6"/>
<tag k="b" v="7"/>
</test>
</question>
我想 return 测试的所有值 v,如果 k = "a" AND v = "1",像这样:
v="3"
v="5"
到目前为止我的方法:
for $i in //test
where ($i/tag[@k = 'a' and @v = '1'])
return $i/tag/@v
但这不正确,因为那是 return:
v="1"
v="2"
v="3"
v="1"
v="4"
v="5"
感谢您的帮助:)
您可能正在寻找类似
的内容for $i in //test
where ($i/tag[@k = 'a'][@v="1"])
return $i/tag[@k="b"]/@v
您的选择标准并不十分清楚,但returns您所期望的是:
for $i in //test
where $i/tag[@k = 'a' and @v = '1']
return $i/tag[not(@k = 'a' or @v = '1')]/@v
您可以简化并在单个 XPath 表达式中执行此操作:
//test/tag[@k = 'a' and @v = '1']/tag[not(@k = 'a' or @v = '1')]/@v