Hi,
ich habe ein dxl-File der Art:
?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE document SYSTEM 'xmlschemas/domino_6_0_1.dtd'>
<document xmlns='http://www.lotus.com/dxl' version='6.0' maintenanceversion='1.0'
replicaid='C1256D9E0054D83B' form='IMGAllDocs'>
<noteinfo noteid='9ae' unid='FFE603A07D20DDD3C1256DCD005A3D9D' sequence='14'>
<created><datetime>20031028T172540,13+01</datetime></created>
<modified><datetime>20031028T172724,27+01</datetime></modified>
<revised><datetime>20031028T172724,26+01</datetime></revised>
<lastaccessed><datetime>20031028T172724,26+01</datetime></lastaccessed>
<addedtofile><datetime>20031028T172540,14+01</datetime></addedtofile></noteinfo>
<updatedby><name>CN=Rolf Burkert/O=IMG</name><name>CN=Axel Janssen/O=IMG</name></updatedby>
<revisions><datetime>20031028T172540,14+01</datetime><datetime>20031028T172540,15+01</datetime><datetime
>20031028T172540,51+01</datetime><datetime>20031028T172543,74+01</datetime><datetime
>20031028T172543,89+01</datetime><datetime>20031028T172555,42+01</datetime><datetime
>20031028T172555,55+01</datetime><datetime>20031028T172632,57+01</datetime><datetime
>20031028T172637,07+01</datetime><datetime>20031028T172637,14+01</datetime><datetime
>20031028T172637,46+01</datetime><datetime>20031028T172656,80+01</datetime><datetime
>20031028T172718,96+01</datetime></revisions>
[... stuff ...]
<item name='$FILE' summary='true' sign='true' seal='true'><object><file hosttype='bytearraypage'
compression='none' flags='storedindoc' name='STG23195'>
<created><datetime>20031028T172629,05+01</datetime></created>
<modified><datetime>20031028T172629,05+01</datetime></modified><filedata>
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
[... stuff ...]
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAE=
</filedata></file></object></item>
<item name='$FILE' summary='true' sign='true' seal='true'><object><file hosttype='bytearraypage'
compression='none' flags='storedindoc' name='STG15815'>
<created><datetime>20031028T172632,48+01</datetime></created>
<modified><datetime>20031028T172632,48+01</datetime></modified><filedata>
AAYAAA8IAAD9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
[... stuff ...]
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
</filedata></file></object></item>
</document>
Ich möchte mit einem xslt alle nodes aus dem Ausgangs-DXL kopieren ausser die mit element-Name "file" und Attribut von name='$File' (<item name='$FILE' ...>)sowie alle childs derselben.
Irgendwelche xslt-Experten ???
Gruß Axel
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>