0

我在以正确的方式将结果标签嵌套在一起时遇到问题。结果应如下所示:

目标结果

<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>

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

4

1 回答 1

0

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

因此,您首先需要做一些事情来生成 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 和 $n03 也是类似的)。

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

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>
})
于 2013-05-13T17:28:34.863 回答