<results>
{
for $p in
(
for $o in doc("mondial-3.0.xml") /mondial/organization
where fn:count($o/members)
order by fn:count($o/members) descending
return <organization>
<name> {$o/@name/string()} </name>
<abbreviation> {$o/@abbrev/string()} </abbreviation>
<num_members> {fn:count($o/members)} </num_members>
<members> {for $m in doc("mondial-3.0.xml") $o/members
return <country> {mondial/country[@id=$m/@country]/@name/string()} </country>} </members>
</organization>
)[position() < 10]
return $p
}
</results>
我无法访问此问题中的祖先节点,因为我已经存储了一个参数的id,现在我想匹配该参数的id并获取参数的名称。
我没有得到任何输出。我不知道我哪里出错了。
XML文件: -
答案 0 :(得分:0)
您没有定义查询的所需输出,因此很难告诉您为什么您的查询没有提供所需的输出;但有一些关于查询的事情表明它完全错误。
首先,$o
始终是一个<mem>
元素,因此fn:count($o)
始终为1,因此在where
和order by
中使用此表达式条款不能产生任何有用的效果。
其次,用于生成<f>
元素内容的表达式看起来完全错误,因为它并不以任何方式依赖$o
的值。
答案 1 :(得分:0)
在您发布的链接中,XML的根元素为mondial
而非users
,因此我在此答案中使用mondial
。请注意, 组织成员 和 国家 通过 国家/地区ID 进行关联,因此您可以按照以下步骤获取每个member
元素的国家/地区名称:
<f>
{
for $m in $o/members
return <g> {mondial/country[@id=$m/@country]/@name/string()} </g>
}
</f>
这是完整的工作查询。使用来自问题链接的XML作为输入在http://www.xpathtester.com/xquery中进行测试:
<a>
{
for $p in
(
for $o in /mondial/organization
where fn:count($o/members)
order by fn:count($o/members) descending
return <b>
<c> {$o/@name/string()} </c>
<d> {$o/@abbrev/string()} </d>
<e> {fn:count($o/members)} </e>
<f> {for $m in $o/members
return <g> {/mondial/country[@id=$m/@country]/@name/string()} </g>} </f>
</b>
)[position() < 10]
return $p
}
</a>