2013-05-12 73 views
0

我遇到了以正確方式嵌套結果標記的問題。 結果應該是這樣的:xQuery類別嵌套問題

旨在結果

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

目前我只設法獲得位置正確的結果,在categoryA b比的位置高1個分級層。職位應嵌套在類別中。可以通過讓$ 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> 

我真的很感激一些幫助,我不知道的。謝謝。

+0

實際上你想得到什麼。請描述清楚 – 2013-05-13 09:31:02

回答

0

如果我理解正確,您希望將關於LangfristigesVermoegen(及其子項)的信息分組到元素categoryA下的輸出中,並將關於Kurzfristigesvermoegen的信息歸入categoryB下。

因此,您首先需要做一些事情來生成categoryA和categoryB元素。例如,可以使用類似的代碼你現在得到,只是不用遍歷

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

你需要遍歷$ A02生成

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

在每個類別中的位置[self :: LangfristigesVermoegen]/*對於類別A,對於類別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> 
}) 
+0

非常感謝,它的工作原理。 週末愉快:) – user2374343 2013-05-13 21:02:53