Hallo allseits,
ich habe ein XML welches (stark verkuerzt) wie folgt aussieht:
Und muss daraus ein File wie folgt generieren:
Dazu habe ich mir folgendes xslt gebastelt, welches auch ganz gut funktioniert:
Leider passiert es aber, dass im "home"-Attribute KEIN "_" vorhanden ist. Das sollte als Fehler behandelt werden, die Transformation dürfte bei einem solchen (fuer mich) fehlerhaften Wert auch abbrechen.
Also hab ich obiges xslt wie folgt verändert:
Nur kann er das nicht kompilieren, er bricht mit folgender Fehlermeldung ab:
Error! Fehler beim Überprüfen des Typs des Ausdrucks 'funcall(matches, [ParentLocationPath(ParentLocationPath(step("parent", -1), step("parent", -1)), step("attribute", 19)), literal-expr(_)])'.
Wäre nett wenn mir jemand sagen könnte, was ich da falsch mache (oder ev. auch wie man das besser löst), herzlichen Dank!
LG., mne
ich habe ein XML welches (stark verkuerzt) wie folgt aussieht:
XML:
<model><sources>
<source home="String1_String2">
<abos>
<abo name="abo1" />
<abo name="abo2" />
</abos>
</source>
</sources></model>
Und muss daraus ein File wie folgt generieren:
Code:
String2-abo1
String2-abo2
Dazu habe ich mir folgendes xslt gebastelt, welches auch ganz gut funktioniert:
XML:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" />
<xsl:template match="/model/sources/source/abos/abo">
<xsl:value-of select="concat(substring-after(../../@home,'_'),'-')" />
<xsl:value-of select="concat(@name,'
')" />
</xsl:template>
<xsl:template match="text()" />
</xsl:stylesheet>
Leider passiert es aber, dass im "home"-Attribute KEIN "_" vorhanden ist. Das sollte als Fehler behandelt werden, die Transformation dürfte bei einem solchen (fuer mich) fehlerhaften Wert auch abbrechen.
Also hab ich obiges xslt wie folgt verändert:
XML:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" />
<xsl:template match="/model/sources/source/abos/abo">
<xsl:choose>
<xsl:when test="matches(../../@home,'_')" >
<xsl:value-of select="concat(substring-after(../../@home,'_'),'-')" />
<xsl:value-of select="concat(@name,'
')" />
</xsl:when>
<xsl:otherwise>
<xsl:message terminate="yes">Fehler!</xsl:message>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="text()" />
</xsl:stylesheet>
Nur kann er das nicht kompilieren, er bricht mit folgender Fehlermeldung ab:
Error! Fehler beim Überprüfen des Typs des Ausdrucks 'funcall(matches, [ParentLocationPath(ParentLocationPath(step("parent", -1), step("parent", -1)), step("attribute", 19)), literal-expr(_)])'.
Wäre nett wenn mir jemand sagen könnte, was ich da falsch mache (oder ev. auch wie man das besser löst), herzlichen Dank!
LG., mne
Zuletzt bearbeitet von einem Moderator: