Thomas J.S.: 2 XML Dokumente;

Beitrag lesen

Hallo,

ich habe zwei xml Dateien, die ich mit einer xsl-Datei zu einer dritten xml-Datei kombiniere.
die erste xml-Datei besitzt ein Element, dass ich mit einer Id in der zweiten xml-Datei vergleichen möchte. Nach dem Vergleich soll der Inhalt des Elements mit der identischen ID in meine dritte xml-Datei eingetragen werden.

meine xsl-Datei:
<xsl:variable name="extItem" select="document('zweiteDatei.xml')"/>

<xsl:template match="/">
<orders>
<xsl:for-each select="//order">

<xsl:for-each select="orders/order">
(das "//order" ist "schlimm", weil wirklich unnötig)

<xsl:template match="item">
<no>
   <xsl:for-each select="(//orders/order/item[alt_sku=$zweiteDatei/items/item/@artno])">
   <xsl:value-of select="(alt_sku)" />
   <xsl:value-of select="($zweiteDatei/items/item/@artno)" />
   </xsl:for-each>
</no>

Abgesehen davon, dass $zweiteDatei eigentlich $extItem heissen soll, verstehe ich nicht was du hier machen möchtest. (* es sein denn du hast mehrere items (im 2. XML) die im @artno die ID ('alt_sku'??) eines items aus dem 1. XML haben)
Wenn "Nach dem Vergleich der Inhalt des Elements mit der identischen ID in meine dritte xml-Datei eingetragen werden soll", müsste das so aussehen:

<xsl:template match="item">
   <xsl:variable name="altSku" select="alt_sku" />
   ...
   <no>
      <xsl:value-of select="$extItem/items/item[@artno = $altSku]" />
   </no>

* dann sollte es so aussehen:
<xsl:template match="item">
   <xsl:variable name="altSku" select="alt_sku" />
   ...
   <xsl:for-each select="$extItem/items/item[@artno = $altSku]">
      <no>
         <xsl:value-of select="." />
      </no>
   </xsl:for-each>

Grüße
Thomas