xQuery类别嵌套问题

时间:2013-05-12 13:40:43

标签: xquery

我有一个问题是以正确的方式将结果标记嵌套在一起。 结果应如下所示:

目标结果

<categoryA>
  <position>...</position>
  <position>...</position>
  ...
</categoryA>
<categoryB>
  <position>...</position>
  <position>...</position>
  ...
</categoryB>

目前我只是设法获得了正确的位置结果,类别A和B是比位置更高的1个等级层。这些职位应该嵌套在类别中。这些类别可以通过let $ y:= $ d / Bilanz / Aktiva / *(分别为$ d $ d / Bilanz / Aktiva / LangfristigesVermoegen和$ d $ d / Bilanz / Aktiva / KurzfristigesVermoegen)来引用。

这是我的问题:

查询

let $d := doc('http://etutor.dke.uni-linz.ac.at/etutor/XML?id=5001')/Bilanzen

let $a02 := $d/Bilanz[@jahr='2002']/Aktiva/*
let $a03 := $d/Bilanz[@jahr='2003']/Aktiva/*

for $n02 in $a02//* , $n03 in $a03//*

  (:
  where name($n02) = name($n03)
  where node-name($n02) = node-name($n03)
  :)

where name($n02) = name($n03)

return <position name="{node-name($n02)}"> 
<j2002>{data($n02/@summe)}</j2002>
<j2003>{data($n03/@summe)}</j2003>
<diff>{data($n03/@summe) - data($n02/@summe)}</diff>
</position>

XML

<Bilanzen>
    <Bilanz jahr="2002">
        <Aktiva>
            <LangfristigesVermoegen>
                <Sachanlagen summe="1486575.8"/>
                <ImmateriellesVermoegen summe="67767.2"/>
                <AssoziierteUnternehmen summe="190826.3"/>
                <AndereBeteiligungen summe="507692.7"/>
                <Uebrige summe="92916.4"/>
            </LangfristigesVermoegen>
            <KurzfristigesVermoegen>
                <Vorraete summe="78830.9"/>
                <Forderungen summe="198210.3"/>
                <Finanzmittel summe="181102.0"/>
            </KurzfristigesVermoegen>
        </Aktiva>
        <Passiva>
            <Eigenkapital>
                <Grundkapital summe="91072.4"/>
                <Kapitalruecklagen summe="186789.5"/>
                <Gewinnruecklagen summe="798176.2"/>
                <Bewertungsruecklagen summe="-34922.4"/>
                <Waehrungsumrechnung summe="0"/>
                <EigeneAktien summe="0"/>
            </Eigenkapital>
            <AnteileGesellschafter summe="23613.1"/>
            <LangfristigeVerb>
                <Finanzverbindlichkeiten summe="680007.1"/>
                <Steuern summe="36555.8"/>
                <Rueckstellungen summe="429286.1"/>
                <Baukostenzuschuesse summe="169246.0"/>
                <Uebrige summe="36166.9"/>
            </LangfristigeVerb>
            <KurzfristigeVerb>
                <Finanzverbindlichkeiten summe="14614.6"/>
                <Steuern summe="65247.6"/>
                <Lieferanten summe="94939.2"/>
                <Rueckstellungen summe="123664.8"/>
                <Uebrige summe="89464.8"/>
            </KurzfristigeVerb>
        </Passiva>
    </Bilanz>
    <Bilanz jahr="2003">
        <Aktiva>
            <LangfristigesVermoegen>
                <Sachanlagen summe="1590313.7"/>
                <ImmateriellesVermoegen summe="69693.2"/>
                <AssoziierteUnternehmen summe="198224.7"/>
                <AndereBeteiligungen summe="418489.3"/>
                <Uebrige summe="104566.7"/>
            </LangfristigesVermoegen>
            <KurzfristigesVermoegen>
                <Vorraete summe="20609.8"/>
                <Forderungen summe="289458.5"/>
                <Finanzmittel summe="302445.9"/>
            </KurzfristigesVermoegen>
        </Aktiva>
        <Passiva>
            <Eigenkapital>
                <Grundkapital summe="91072.4"/>
                <Kapitalruecklagen summe="186789.5"/>
                <Gewinnruecklagen summe="875723.4"/>
                <Bewertungsruecklagen summe="-15459.5"/>
                <Waehrungsumrechnung summe="-633.7"/>
                <EigeneAktien summe="0"/>
            </Eigenkapital>
            <AnteileGesellschafter summe="22669.8"/>
            <LangfristigeVerb>
                <Finanzverbindlichkeiten summe="733990.2"/>
                <Steuern summe="68156.8"/>
                <Rueckstellungen summe="395997.2"/>
                <Baukostenzuschuesse summe="177338.5"/>
                <Uebrige summe="38064.9"/>
            </LangfristigeVerb>
            <KurzfristigeVerb>
                <Finanzverbindlichkeiten summe="6634.7"/>
                <Steuern summe="97119.1"/>
                <Lieferanten summe="89606.0"/>
                <Rueckstellungen summe="128237.5"/>
                <Uebrige summe="98495.2"/>
            </KurzfristigeVerb>
        </Passiva>
    </Bilanz>
 </Bilanzen>

我真的很感激一些帮助,我根本不知道。谢谢。

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您希望将有关LangfristigesVermoegen(及其子项)的信息分组到元素类别A下的输出中,并将有关Kurzfristigesvermoegen的信息分组到类别B下。

因此,您首先需要做一些事情来生成categoryA和categoryB元素。例如,

let $d := doc(...)/Bilanzen
return (
  <categoryA>{ ... children of category A here ... }</categoryA>,
  <categoryB>{ ... children of category B here ... }</categoryB>
)

每个类别中的位置都可以使用类似于您现在获得的代码生成,除了不是迭代

for $n02 in $a02//* , $n03 in $a03//*

你需要为类别A迭代超过$ a02 [self :: LangfristigesVermoegen] / *,对于类别B需要超过$ a02 [self :: KurzfristigesVermoegen] / *(同样地,当然,$ n02和$ NO 3)。

如果类别集不是静态的,并且您只想使用输入中存在的相同分组元素对输出中的内容进行分组,那么您将需要这样的外部结构:

for $assetclass1 in $anno2002/*
let $assetclass2 := $anno2003/*[name() = name($assetclass1)]
return
(element {name($assetclass1)} {
  for $old in $assetclass1/*,
      $new in $assetclass2/*
  where name($old) eq name($new)
  return <position name="{node-name($old)}"> 
    <j2002>{data($old/@summe)}</j2002>
    <j2003>{data($new/@summe)}</j2003>
    <diff>{data($new/@summe) - data($old/@summe)}</diff>
  </position>
})
相关问题