Hallo,
ich hoffe die Experten können mir helfen, ich glaube es ist ein ganz schön verzwicktes Problem.
Gegeben ist ein Quell-XML, in dem es Elemente geben kann das weitere XMLs adressiert, in der Form:<Widget Name="PremiumCombiView_Audio_CD" FileNamePrefix="PremiumCombiView_Audio_CD" UniqueID="126551782039362000" Path="Container">
Sprich das XML liegt unter dem Pfad
Container/PremiumCombiView_Audio_CD.xml
als Eigenschaft haben alle XML eine UniqueID.Das wäre an sich kein Problem mit einem rekursiven Template
zu realiseren, das Problem ist das sich ja mehrere Widget
Elemente in einem Dokument befinden können und ich immer nur
das erste Element finde, in das nächste Dokument wechsele und wieder
nach Widget Elementen suche. Wie ihr euch vorstellen könnt, kann sich das zu einer weiten Verzweigung führen.
Folgende "Skizze" soll das Problem verdeutlichen.XML1 | XML2 | XML3 | XMLx Ebene
Widget--->Widget--->Widget (1)
| |->Widget-->Widget (2)
|
|->Widget------------>Widget (3)Wie ist es möglich in alle referenzierten XMLs zu wechseln ?
Sollte ich zuerst alle Widgets in Ebene 1 abarbeiten, dann Ebene 2,
aber wie kann ich das anstellen ich verliere doch den Kontext wenn ich von einem XML ins nächste wechsele ?
Ich lasse mal oben alles als Zitat stehen.
Du hast recht, das könnte kompliziert werden. Theoretisch ist Rekursion schon der richtige Weg, kommt aber doch darauf an was als ausgabe rauskommen soll.
"mehrere Widget Elemente in einem Dokument":
Der einfachtes, aber auch das mächtigste/'gefährlichste' Möglichkeit ist:
<xsl:template match="Widget">
<xsl:apply-templates select="document(concat(@Path, '/', @Name, '.xml'))/rootElement" />
</xsl:template>
Das "erwischt" alle Widget im ersten Dokument, dann führt es die Templates für das gefundene XML aus. Wenn darin auch Widget vorkommt, wird das Template auf für diese instanziiert usw. immer weiter tiefer. Das Kontext geht an sich nicht verloren, weil du noch immer im obersten Widget bist.
Das Ergebnis wird dann so sein wie deine Skizze (also was die Verschachtelung der Ausgabe angeht). "Gefährlich" kann es nur eben sein, wenn diese Verschachtelung der XMLs wirklich sehr tief geht.
Kompliziert kann es dann werden, wenn du für die Ausgabe eine ganz andere Strukur brauchst und wenn die Path- und Name-Angaben relativ sind bzw. nicht den echten Pfad ergeben.
Natürlich kommt es auch noch darauf an, was noch im Template für Widget für die Ausgabe stehen muss. (Bei bedarf kannst du bestimmte Sachen per Parameter auch immer weiter mitgeben.)
Grüße
Thomas