如何在同一个XQuery中访问祖先节点?

时间:2015-11-21 19:06:57

标签: xpath xquery zorba

<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

2 个答案:

答案 0 :(得分:0)

您没有定义查询的所需输出,因此很难告诉您为什么您的查询没有提供所需的输出;但有一些关于查询的事情表明它完全错误。

首先,$o始终是一个<mem>元素,因此fn:count($o)始终为1,因此在whereorder 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>