Hier ist der code.
Das hat Nerven gekostet.
Typisch xml.
Typischer xml-Dialog mit den Informatik-Diplomanden, die hier rumlaufen:
"Kannst du mir bei xslt helfen."
"Ja klar, das ist einfach, wir haben das im Studium gehabt."
15 Minuten später stellen wir dann gemeinsam fest, dass im Studium offenbar
meine Probleme weggelassen wurden.
Glaub, das ist noch nicht richtig effizient, da ich mir mit Programmierkonstrukten behelfe (choose, when, otherwise).
Code der rein über die Daten geht ist angeblich wesentlich performanter.
Naja. Kann erstmal weitermachen. Schliesslich soll da noch in diesem Jahr ein von Usern benutzbares Produkt rauskommen.
Für meine bescheidenen xslt-Erfahrungen bin ich mit code aus dem Costello-Tutorial (xfront.com) besser gefahren als mit den Sachen von Roseanne Zhang.
Verbesserungen, Anmerkungen, etc. immer herzlich willkommen. Zweck des ganzen ist es, den Base64-encodeten Inhalt von Attachments und OLE-Objekten aus DXL-Files zu entfernen.
Jeder, der sagt, xslt wäre einfach, ist entweder sehr intelligent oder spinnt (oder beides).
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="xml"/>
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="*">
<xsl:choose>
<xsl:when test="@name='$FILE'">
<xsl:element name="item">
<xsl:for-each select="@*">
<xsl:attribute name="{name(.)}">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:for-each>
stripped
</xsl:element>
</xsl:when>
<xsl:when test="name(.)='objectref'">
<xsl:element name="{name(.)}">
<xsl:for-each select="@*">
<xsl:attribute name="{name(.)}">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:for-each>
stripped
</xsl:element>
</xsl:when>
<xsl:otherwise>
<xsl:element name="{name(.)}">
<xsl:for-each select="@*">
<xsl:attribute name="{name(.)}">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:for-each>
<xsl:apply-templates/>
</xsl:element>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="text()">
<xsl:value-of select="."/>
</xsl:template>
</xsl:stylesheet>