XSLT mit When Bedingung einen Text abfragen und kopieren

okah

Grünschnabel
Hallo,

ich habe wieder ein Problem:

meine xml Datei:
<?xml version="1.0" encoding="ISO-8859-1"?>
<AA x="man">
<BB id="100" >
<Query id="1" use="yes">
Das ist ein Integer
</Query>
</BB>
<BB id="110" >
<Query id="2" use="no">
Das ist ein String
</Query>
</BB>
</AA>

die gewünschte xml Datei nach xsl Transformation:
<AA x="man">
<BB id="100" >
<Query id="1" use="yes">
<FE type="Integer">
</FE>
</Query>
</BB>
<BB id="110" >
<Query id="2" use="no">
<DE type="String">
</DE>
</Query>
</BB>
</AA>

Die Bedingung ist, falls der Inhalt von Query-Text() "Integer" enthält, dann erstelle ein Element <FE> und Attribut "type" mit dem Wert "Integer"
falls der Inhalt von Query-Text() einen String enthält, dann erstelle ein Element <DE> und Attribut "type" mit dem Wert "String"

Ich habe folgende xsl geschrieben.
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:eek:utput method="xml" encoding="UTF-8" indent="yes"/>

<xsl:attribute-set name="list1">
<xsl:attribute name="type">integer</xsl:attribute>
</xsl:attribute-set>
<xsl:attribute-set name="list2">
<xsl:attribute name="type">string</xsl:attribute>
</xsl:attribute-set>

<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>

<xsl:template match="Query/text()">
<xsl:copy>
<xsl:choose>
<xsl:when test="contains(text(), 'Integer')">
<xsl:element name="FE" use-attribute-sets="list1">
<xsl:apply-templates />
</xsl:element>
</xsl:when>
<xsl:when test="contains(text(), 'String')">
<xsl:element name="DE" use-attribute-sets="list2">
<xsl:apply-templates />
</xsl:element>
</xsl:when>
</xsl:choose>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>

Leider gibt mir die Transformation nicht das gewünschte Ergebnis aus.
wie kann ich mit der When-Bedingung den Query/Text() abfragen ob er einen String oder Integer enthält und neue Elemente erzeugen?

Über Hilfe und Tipps würde ich mich freuen, Gruß
 
ich habe eine Lösung gefunden.

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:eek:utput method="xml" encoding="UTF-8" indent="yes"/>

<xsl:attribute-set name="list1">
<xsl:attribute name="type">integer</xsl:attribute>
</xsl:attribute-set>
<xsl:attribute-set name="list2">
<xsl:attribute name="type">string</xsl:attribute>
</xsl:attribute-set>

<xsl:template match="node()">
<xsl:copy>
<xsl:choose>
<xsl:when test="contains(., 'Integer')">
<xsl:element name="FE" use-attribute-sets="list1">
<xsl:apply-templates />
</xsl:element>
</xsl:when>
<xsl:when test="contains(., 'String')">
<xsl:element name="FE" use-attribute-sets="list2">
<xsl:apply-templates />
</xsl:element>
</xsl:when>
</xsl:choose>
</xsl:copy>
</xsl:template>

<xsl:template match="Query/text()">
<xsl:apply-templates select="@*|node()"/>
</xsl:template>
</xsl:stylesheet>

so funktionierts!
 
Zurück