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>要素であり、常に 1 であるため、 and句fn:count($o)でこの式を使用しても効果はありません。whereorder by

第 2 に、<f>要素のコンテンツを生成するために使用される式は、 の値にまったく依存していないため、すべて間違っているように見えます$o

于 2015-11-21T23:36:17.130 に答える
0

あなたが投稿したリンクでは、XML のルート要素はmondialnotであるため、この回答でusers使用します。組織のメンバー国は国 IDでリンクされていることにmondial注意してください。したがって、次のようにして、すべての要素の国名を取得できます。member

<f> 
{
    for $m in $o/members
    return <g> {mondial/country[@id=$m/@country]/@name/string()} </g>
} 
</f>

これが完全な作業クエリです。http://www.xpathtester.com/xqueryで、問題に投稿されたリンクの XML を入力として使用してテストしました。

<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 に答える