Ersetzung bei XSL Transformation

Status
Nicht offen für weitere Antworten.
X

xhi2018

Gast
Hallo,

ich habe eine XML-Datei mit XSL zu erzeugen, hänge dabei aber leider an einer Stelle fest und komme nicht weiter. Allzuviel Ahnung von XSL Transformation :bahnhof: hab ich leider auch nicht und deshalb hier die Frage ob mir vielleicht jemand von Euch einen Tipp geben könnte.
Hier beispielhaft meine Input Datei:
[XML]<?xml version="1.0" encoding="ISO-8859-1"?>
<foo>
<bar>
<name>abc</name>
<version>1.00-00</version>
</bar>
<bar>
<name>def</name>
<version>1.01-00</version>
</bar>
<bar>
<name>ghi</name>
<version>1.02-00</version>
</bar>
....
</foo>[/XML]
Hier die XSL Datei
[XML]<?xml version="1.0" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:eek:utput method="html" indent="yes" />
<xsl:template match="/">
<xsl:variable name="lower">abcdefghijklmnopqrstuvwxyz</xsl:variable>
<xsl:variable name="upper">ABCDEFGHIJKLMNOPQRSTUVWXYZ</xsl:variable>
<xsl:element name="element">
<xsl:attribute name="version">2.0</xsl:attribute>
<xsl:element name="test">
<xsl:attribute name="id"><xsl:text>id-text</xsl:text></xsl:attribute>
<xsl:for-each select="foo/bar">
<xsl:element name="prj">
<xsl:variable name="barname" select="name" />
<xsl:attribute name="refid">irgendeintext/<xsl:value-of select="name" />/<xsl:value-of
select="translate($barname,$lower,$upper)" />/<xsl:value-of
select="version" />,<xsl:value-of
select="name" /></xsl:attribute>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:element>
</xsl:template>
</xsl:stylesheet>[/XML] Erzeugt damit diesen XML-Output.[XML]<element version="2.0">
<test id="id-text">
<prj refid="irgendeintext/abc/ABC/1.00-00,abc"></prj>
<prj refid="irgendeintext/def/DEF/1.01-00,def"></prj>
<prj refid="irgendeintext/ghi/GHI/1.02-00,ghi"></prj>
<prj refid="irgendeintext/jkl/JKL/1.20-00,jkl"></prj>
<prj refid="irgendeintext/mno/MNO/10.00-00,mno"></prj>
</test>
</element>[/XML] Mein Problem ist die Version. Der Punkt "." und der Bindestrich "-" in der Version müssten in einen Unterstrich "_" geändert werden. Also so:[XML]<element version="2.0">
<test id="id-text">
<prj refid="irgendeintext/abc/ABC/1_00_00,abc"></prj>
<prj refid="irgendeintext/def/DEF/1_01_00,def"></prj>
<prj refid="irgendeintext/ghi/GHI/1_02_00,ghi"></prj>
<prj refid="irgendeintext/jkl/JKL/1_20_00,jkl"></prj>
<prj refid="irgendeintext/mno/MNO/10_00_00,mno"></prj>
</test>
</element>[/XML]Aber leider hab ich keine :bahnhof: wie ich da rangehen könnte.

Bin für jeden Tipp sehr dankbar :)
 
S

SlaterB

Gast
na wieder translate benutzen, wie bei lower/ upper:

select="translate(version,".-","__")"
 
X

xhi2018

Gast
Hallo,

na wieder translate benutzen, wie bei lower/ upper:
select="translate(version,".-","__")"
ja mei - wie einfach... ;) und mit den richtigen - ' - Anführungszeichen geht's dann wie gewünscht:
[XML]<?xml version="1.0" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:eek:utput method="html" indent="yes" />
<xsl:template match="/">
<xsl:variable name="lower">abcdefghijklmnopqrstuvwxyz</xsl:variable>
<xsl:variable name="upper">ABCDEFGHIJKLMNOPQRSTUVWXYZ</xsl:variable>
<xsl:element name="element">
<xsl:attribute name="version">2.0</xsl:attribute>
<xsl:element name="test">
<xsl:attribute name="id"><xsl:text>id-text</xsl:text></xsl:attribute>
<xsl:for-each select="foo/bar">
<xsl:element name="prj">
<xsl:variable name="barname" select="name" />
<xsl:attribute name="refid">irgendeintext/<xsl:value-of select="name" />/<xsl:value-of
select="translate($barname,$lower,$upper)" />/<xsl:value-of select="translate(version,'.-','__')"/>,<xsl:value-of
select="name" /></xsl:attribute>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:element>
</xsl:template>
</xsl:stylesheet>[/XML]super - bin glücklich & vielen Dank :applaus:
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben