Frutz: Element kopieren aus anderer Datei

Grüßt Euch,

Gegeben sind folgende Dateien:

datei1.xml
datei2.xml
final.xml

Die final.xml setzt sich aus den Inhalten der beiden anderen xml (datei1/datei2) zusammen. Zusammenführen kann ich beide.

Das Problem ist, dass ich in der Gesamtdatei (final.xml) an einer durch ein X-Schema vorgegeben Position Daten einfügen muss.

Im Ausschnitt sieht das dann so aus:

  
[...]  
<NET:link xlink:href="#DE.DS.PILLNITZ.X00QIAQ_001"/>  
<NET:link xlink:href="#DE.DS.PILLNITZ.X00QIAQ_002"/>  
[...]  

Das Element NET:link setzt sich dabei aus den NET:links der jeweiligen Datei zusammen. Es gibt dabei in beiden xml mehrere verschiedene Objekte, die ein NET:link-Element haben. Diese Objekte werden durch eine eindeutige ID unterschieden.

Für die Datei, auf die ich die Transformation anwende (datei1.xml), funktioniert das und ich kann die NET:link-Element kopieren.
Greife ich dann aber auf die externe Datei (datei2.xml) zu, so kopiert er mir nicht die NET:link-Elemente zur jeweiligen ID, sondern alle in der Datei vorhandenen NET:link-Elemente.

Mein XSL-Code sieht so aus:

  
<!--Die Variablen $datensatz1 und $datensatz2 werden erstellt, sind hier aber nicht mit aufgeführt, das funktioniert.-->  
<xsl:for-each select="$datensatz1">  
  <xsl:variable name="id_ds1" select="./*:Road/@*:id"/>  
    <xsl:for-each select="$datensatz2">  
    <xsl:if test="./*:Road/@*:id=$id_ds1 ">  
      <xsl:variable name="currentid" select="./*:Road/@*:id"/>  
      <xsl:copy>  
         <!--Kopieren anderer Elemente, dass funktioniert.-->  
         <xsl:apply-templates select=".//*:beginLifespanVersion" mode="copyAll"/>  
       [...]  
         <!--Kopieren des gewünschten NET:link Elements. Hier gibt es Probleme-->  
         <xsl:apply-templates select="($datensatz1)//*:Road//*:link[($datensatz1)//*:Road//@*:id=$currentid]" mode="copyAll"/>  
       [...]  

Als Ergebnis erhalte ich:

  
[...]  
<!--Die Elemente aus Datei1-->  
<NET:link xlink:href="#DE.DS.PILLNITZ.X00QIAQ_001"/>  
<NET:link xlink:href="#DE.DS.PILLNITZ.X00QIAQ_002"/>  
<!--Hier sollen die Elemente aus Datei2 stehen, passend zur ID, welche in der Variable "currentid" gespeichert wird. Es werden aber alle NET:link-Elemente ausgegeben, nicht nur die zur ID passenden-->  
[...]  

Ich hoffe, dass mein Problem deutlich wird. Ich verstehe nicht, warum beim Zugriff auf die externe Datei scheinbar nicht auf die in "currentid" gespeicherte ID geachtet wird, um nur die gewünschten Elemente zu kopieren.

Falls noch weitere Fragmente benötigt werden, kann ich gern noch etwas schicken. Aber ich vermute stark, dass der Fehler hier irgendwo liegt.

Danke,
Gruß,
André

  1. Grüßt Euch,

    ich habe es hinbekommen, so wie ich es wollte. Der Fehler lag in dieser Zeile:

      
    <xsl:apply-templates select="($datensatz1)//*:Road//*:link[($datensatz1)//*:Road//@*:id=$currentid]" mode="copyAll"/>  
    
    

    Sie muss so heißen

      
    <xsl:apply-templates select="($datensatz1)[.//*:Road//@*:id=$currentid]//*:Road//*:link" mode="copyAll"/>  
    
    

    Das Prädikat

      
    .//*:Road//@*:id=$currentid  
    
    

    war an der falsche Stelle und falsch geschrieben.

    Danke,
    Gruß,
    André