1
<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 文件:-

xml 文件的链接是https://raw.githubusercontent.com/kroell/hsrm-mi-2semester-markuplanguage/master/Abgabe2/Aufgabe2/mondial-3.0.xml

4

2 回答 2

0

您没有定义查询的所需输出,因此很难告诉您为什么您的查询没有给出所需的输出;但是关于查询有几件事表明它是完全错误的。

首先,$o总是一个<mem>元素,所以fn:count($o)总是1,所以在whereandorder by子句中使用这个表达式不会有任何有用的效果。

其次,用于生成<f>元素内容的表达式看起来完全错误,因为它不依赖于$o.

于 2015-11-21T23:36:17.130 回答
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>
于 2015-11-22T02:42:32.627 回答