Hallo zusammen,
ich arbeite derzeit mit BIRT und habe eine XML-Datenquelle, die stark vereinfacht den folgenden Aufbau besitzt:
Ich bin mit dem Umgang von BIRT und XML einigermaßen vertraut, daher weiß ich, dass BIRT XML-Strukturen als relationale Tabelle "interpretiert". Mir ist auch klar, dass ich mit dem Row-Mapping die Zeilen dieser Tabelle definiere und mit dem Column-Mapping eben die Spalten. Leider scheint BIRT da etwas eigenwillig zu sein.
Ziel: Ich möchte in einer Tabelle alle "first" Elemente ausgeben, in einem Subreport die untergeordneten "second"-Elemente und in einem zweiten Subreport die zugehörigen "third"-Elemente.
Daher lege ich 3 Data-Sets mit den folgenden Row-Mapping Einträgen an (ich verwende BIRT 2.5):
Für alle "first"-Elemente:
Für alle "second"-Elemente:
Für alle "third"-Elemente:
1.) Ich erstelle eine Tabelle mit 3 Spalten. In der ersten Spalte gebe ich den Wert der Spalte "value" (des Elements "first") aus.
2.) In die zweite Spalte füge ich eine 2. Tabelle ein, die das DataSet für die "second"-Elemente enthält.
Den XML-Parameter {?context?} binde ich an die JS-Expression
3.) Die dritte Spalte erhält eine 3. Tabelle, die das DataSet für die "third"-Elemente enthält.
Den XML-Parameter {?context?} binde ich an die JS-Expression
Ich erwarte das Ergebnis:
Aber ab dem dritten Subreport wird der XPath-Ausdruck nicht korrekt ausgewertet:
Ich habe bereits ein paar Varianten probiert. Es hat sich herausgestellt, dass auch ein fixes Row-Mapping mit 2 Attribut-Filtern nicht funktioniert.
Es wäre wunderbar, wenn ihr eine Idee hättet...
Gruß und schöne Weihnachten!
ich arbeite derzeit mit BIRT und habe eine XML-Datenquelle, die stark vereinfacht den folgenden Aufbau besitzt:
Code:
<root>
<first key="1">
<value>A</value>
<second key="1">
<value>a</value>
<third key="1">
<value>1</value>
</third>
<third key="2">
<value>2</value>
</third>
</second>
<second key="2">
<value>b</value>
<third key="1">
<value>1</value>
</third>
<third key="2">
<value>2</value>
</third>
</second>
</first>
<first key="2">
<value>B</value>
<second key="1">
<value>a</value>
<third key="1">
<value>1</value>
</third>
<third key="2">
<value>2</value>
</third>
</second>
<second key="2">
<value>b</value>
<third key="1">
<value>1</value>
</third>
<third key="2">
<value>2</value>
</third>
</second>
</first>
</root>
Ziel: Ich möchte in einer Tabelle alle "first" Elemente ausgeben, in einem Subreport die untergeordneten "second"-Elemente und in einem zweiten Subreport die zugehörigen "third"-Elemente.
Daher lege ich 3 Data-Sets mit den folgenden Row-Mapping Einträgen an (ich verwende BIRT 2.5):
Für alle "first"-Elemente:
Code:
/root/first
Code:
{?context?}/second
Code:
{?context?}/third
1.) Ich erstelle eine Tabelle mit 3 Spalten. In der ersten Spalte gebe ich den Wert der Spalte "value" (des Elements "first") aus.
2.) In die zweite Spalte füge ich eine 2. Tabelle ein, die das DataSet für die "second"-Elemente enthält.
Den XML-Parameter {?context?} binde ich an die JS-Expression
Code:
"/root/first[@key=\""+row["key"]+"\"]"
Den XML-Parameter {?context?} binde ich an die JS-Expression
Code:
"/root/first[@key=\""+row._outer["key"]+"\"]/second[@key=\""+row["key"]+"\"]"
Ich erwarte das Ergebnis:
Code:
Spalte 1 | Spalte 2 | Spalte 3
------------------------------
A a 1
2
b 1
2
B a 1
2
b 1
2
Code:
Spalte 1 | Spalte 2 | Spalte 3
------------------------------
A a
b
B a
b
Ich habe bereits ein paar Varianten probiert. Es hat sich herausgestellt, dass auch ein fixes Row-Mapping mit 2 Attribut-Filtern nicht funktioniert.
Code:
/root/first[@key="2"]/second[@key="2"]/third
Es wäre wunderbar, wenn ihr eine Idee hättet...
Gruß und schöne Weihnachten!