XSLT tranformieren.

fammsi

Grünschnabel
Hallo,

Erstens bin ich neu hier und zweitens bin ich gerade dabei mich in XSLT Transformationen einzuarbeiten und hätte da mal eine Frage?
Gibt es eine Möglichkeit um ab einem bestimmten Knoten, die Unterknoten zusammenzufassen und in einer Variablen zu speichern? Somit sollte die Variable mehrere Parameter enthalten.

die xml Datei sieht folgendermaßen aus.

<Interface>
<Message>
<user>
<name>test</name>
<password>123456</password>
<type>F</type>
</user>
</Message>
</Interface>

ab User sollten die Paramter in einer Variable zusammengefasst werden.
Ist so etwas möglich
Danke im Voraus
 
Hi und Willkommen,

das mit den Variablen ist so ne Sache. Es gibt die Elemente xsL:param und xsl:variable in denen man was speichern kann, allerdings sind diese Inhalte nach der Initialisierung nicht mehr änderbar und soweit ich weis lässt sich da auch kein kompletter Unterknoten abspeichern. Wenn du uns sagst was du damit genau machen willst lässt sich evt. ein anderer Weg finden.

Gruß Benny
 
Hallo Benny,

Also ich möchte aus einem XML File ein BPEL File erzeugen. In BPEL ist es auch möglich in einer Variablen XML-Schema Elemente abzuspeichern. Wenn ich jetzt das XML File durchgehe, kommt die Passage die ich angegeben habe. Die möchte ich diese in einer Variabel zusammenfassen und dem BPEL File bei einem <invoke> Aufruf (ruft einen WebService auf) als inputvariable geben.


die Lösung müsste so in der richtung aussehen.

<process>

<variables>
<variable name="holeData" element="xsdu:user"></variable>
<variable name="Input" messageType="user:userrequest"></variable>
</variables>
<!-- hier beginnt der Aktionsteil in BPEL-->
...
<assign>
<copy>
<from>
<user>
<name>User</name>
<password>123456</password>
<type>F</type>
</user>
</from>
<to variable="holeData" part="user"></to>
</copy>
</assign>


<assign>
<copy>
<from variable="holeData" part="user" query="/user/name/text"></from>
<to variable="Input" part="Benutzer"></to>
</copy>
<copy>
<from variable="holeData" part="user" query="/user/password"></from>
<to variable="Input" part="Passwort"></to>
</copy>
<copy>
<from variable="holeData" part="user" query="/user/type"></from>
<to variable="Input" part="Type"></to>
</copy>
</assign>


<invoke name="User"
partnerLink="UserL"
portType="main:UserPT"
operation="UserOperation"
inputvariable="Input">
</invoke>

...
</process>



Vielleicht gibts da eine andere Lösung dafür

Danke, auch für die schnelle Antwort.



Jürgen
 
Ah also wenn ich dich richtig verstanden hast willst du den Baum einfach in das BPEL Tag Variable setzen. Das sollte mit einem leeren Template gehen wenn ich mich nicht irre. Das könnte dann irgendwie so aussehn.
Code:
..
<variable>
   <xsl:apply-template match="user"/>
</variable>
..


<xsl:template match="user">
</xsl:template>
Das kommt dann allerdings auf die defaulteinstellungen von deinem Prozessor an. Aber soweit ich mich richtig erinnere wird dann einfach nur alles ausgegeben. Wobei ich mir doch grade etwas unsicher bin. Kann auch sein das du das Verhalten mit dem leeren Template überschreibst. Ruf es einfach mal auf aber erstelle kein passendes leeres Template dazu, dann sollte der Prozessor die Kontrolle übernehmen und einfach alles ausgeben.

Ansonsten gibt es ein Element copy-of das ich ich zwar noch nie benutzt habe aber damit sollte es funktionieren.

Gruß Benny
 
Hallo,

mit copy-of wird der komplette Knoten mit Unterknoten kopiert. Wird ein leeres Template angegeben, macht er genau das was im Template für den Knoten steht, nämlich nichts. :)
gibt man kein Template an, schreibt er alle Values von den Knoten in die Zieldatei.

MFG

zEriX
 
Zurück