Domino 9 und frühere Versionen > ND6: Entwicklung

xslt Frage: nodes entfernen

(1/2) > >>

Axel Janssen temp:
Hi,

ich habe ein dxl-File der Art:


--- Code: ---?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>

--- Ende Code ---

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

animate:
ich bin im Moment dabei, mich mit dem Thema XSLT zu beschäftigen, kann die allerdings nicht viel helfen, da ich erst begonnen habe.

Bei JNotes habe ich mal die angehängte XSL-Datei gefunden, die ein DXL-Dokument in XSL FO transormiert, vielleicht kannst du da was abschauen. Ich würde mich freuen, wenn du hier evtl Ergebnisse deiner Arbeit posten würdest, weil ich mich wie gesagt im Moment sehr für dieses Thema interessiere.

Axel Janssen temp:
tendiere dazu, dass Roseanne Zhangs xml faq mir nun zum 2. mal in 2 Wochen weiterhelfen könnte:
http://bobcat.webappcabaret.net/javachina/faq/xslt_01.htm#xslt_Q02
(Punkte
What is identity template?
sowie die 2 Folgepunkte.

gutes Einsteigermaterial:
http://www.xfront.com/
http://www.w3schools.com/xsl/
http://www.zvon.org


noch mehr:
http://www.javaranch.com/gramps/XMLLinks.jsp

Poste die Antwort.

Gruß Axel

Axel Janssen temp:
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).

--- Code: ---<?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>


--- Ende Code ---
 

animate:
danke für die Links und den Code.
Darf ich fragen, warum du es denn nicht mit den XML-Klassen, die Notes für LotusScript zur Verfügung stellt, gemacht hast oder mit den entsprechenden Java-Klassen?
Da ist das "Problem", eine Node zu löschen ja eigentlich ziemlich einfach zu lösen.

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln