Thomas J.S.: "copy-of" kombiniert mit "translate" - wie geht's?

Beitrag lesen

Hallo,

Ja hallo! Dank Deiner Hilfe ist das jetzt der erste echte Erfolg, den ich seit heute Mittag erziele. Schade, dass die Attribute noch fehlen. Aber es klappt soweit schonmal, was mich echt glücklich macht. Wenn jetzt noch die Attribute übernommen würden, wäre das perfekt.

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

<xsl:variable name="source" select="'abcdefghijklmnopqrstuvwxyz'" />
    <xsl:variable name="target" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'" />

<xsl:template match="*">
        xsl:copy
   <xsl:for-each select="@*">
    <xsl:attribute name="{name()}">
     <xsl:value-of select="translate(., $source, $target)" />
    </xsl:attribute>
   </xsl:for-each>
            <xsl:apply-templates />
        </xsl:copy>
    </xsl:template>
 <xsl:template match="text()">
  <xsl:copy-of select="translate(., $source, $target)" />
 </xsl:template>
</xsl:stylesheet>

Macht aus:

<?xml version="1.0" encoding="UTF-8"?>
<data>
    <heading xml:lang="en-US" foo="defg">abc</heading>
    <para xml:lang="EN-US">abc</para>
</data>

ein:

<?xml version="1.0" encoding="UTF-8"?>
<data>
    <heading xml:lang="EN-US" foo="DEFG">ABC</heading>
    <para xml:lang="EN-US">ABC</para>
</data>

Grüße
Thomas (der andere ;-))