Hallo,
die XML-Dateien sind wie folgt aufgebaut:
--> Ausgangsdatei, in die die IDs übertragen werden sollen; wobei das Attribut hilfs-id in der transformierten XML nicht mehr ausgegeben werden soll und ich somit bei der Transformation ignoriert habe.
<volume>
<chapter1>
<chapter2>
<region>
<dataset hilfs-id ="Hilfs-ID_12_100" id="999098">
<name>Dataset-Name1</name>
</dataset>
<dataset hilfs-id ="Hilfs-ID_12_101" id="">
<name>Dataset-Name2</name>
</dataset>
</region>
</chapter2>
</chapter1>
</volume>--> ID-Import-Datei (wurde aus einer CSV-Liste per Textimport im XMLSpy in eine XML-Datei gewandelt.)
<Import>
<Row>
<hilfs_ID>Hilfs-ID_12_100</hilfs_ID>
<name>Dataset-Name1</name>
<ID>999098</ID>
</Row>
<Row>
<hilfs_ID>Hilfs-ID_12_101</hilfs_ID>
<name>Dataset-Name2</name>
<ID/>
</Row>
</Import>
ich kenne jetzt nicht den Rest deines XSLs, aber das grundsätzliche Problem bei:
<xsl:choose>
<xsl:when test="$import_data/Import/Row/ID!=''">
<xsl:attribute name="id">
<xsl:value-of select="$import_data//*[hilfs_ID = $hilfs_id]/ID"/>
</xsl:attribute>
</xsl:when>
<xsl:otherwise>
<xsl:attribute name="id">
<xsl:value-of select="$import_data//*[hilfs_ID = $hilfs_id]/hilfs_ID"/>
</xsl:attribute>
</xsl:otherwise>
ist, dass "$import_data/Import/Row/ID" das immer erste Row im import XML nimmt. Dadurch stimmt der Vergleich wohl nie.
Falls du xsl:choose in einem xsl:for-each verwendest, könnte das anderes aussehen, aber wie gesagt: ich kenne den rest deines XSLs nicht.
Wie sieht also die Umgebung von deinem xsl:choose aus?
Solle das keine Rolle spielen, dann kannst du so etwas verwenden:
<xsl:attribute name="id">
<xsl:choose>
<xsl:when test="not(@id = '')">
<xsl:value-of select="$import_data//*[hilfs_ID = $hilfs-id]/ID"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$import_data//*[hilfs_ID = $hilfs-id]/hilfs_ID"/>
</xsl:otherwise>
</xsl:choose>
</xsl:attribute>
und noch einfacher wäre eigentlich:
<xsl:attribute name="id">
<xsl:choose>
<xsl:when test="@id = ''">
<xsl:value-of select="$import_data//*[hilfs_ID = $hilfs_id]/hilfs_ID"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="@id"/>
</xsl:otherwise>
</xsl:choose>
</xsl:attribute>
Beide würden das ergebnis liefern:
<dataset id="999098"/>
<dataset id="Hilfs-ID_12_101"/>
Grüße
Thomas