Autor Thema: xslt Frage: nodes entfernen  (Gelesen 5469 mal)

Axel Janssen temp

  • Gast
xslt Frage: nodes entfernen
« am: 11.11.03 - 18:07:14 »
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>

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
« Letzte Änderung: 11.11.03 - 18:08:58 von Axel Janssen temp »

Offline animate

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.540
  • Uh, I'm just gonna go find a cash machine.
    • LA2
Re:xslt Frage: nodes entfernen
« Antwort #1 am: 11.11.03 - 20:02:53 »
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.
Thomas

Fortunately, I'm adhering to a pretty strict, uh, drug, uh, regimen to keep my mind, you know, uh, limber.

Axel Janssen temp

  • Gast
Re:xslt Frage: nodes entfernen
« Antwort #2 am: 11.11.03 - 20:46:11 »
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
« Letzte Änderung: 11.11.03 - 20:47:24 von Axel Janssen temp »

Axel Janssen temp

  • Gast
Re:xslt Frage: nodes entfernen
« Antwort #3 am: 13.11.03 - 12:38:52 »
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>

 


Offline animate

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.540
  • Uh, I'm just gonna go find a cash machine.
    • LA2
Re:xslt Frage: nodes entfernen
« Antwort #4 am: 13.11.03 - 12:44:15 »
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.
Thomas

Fortunately, I'm adhering to a pretty strict, uh, drug, uh, regimen to keep my mind, you know, uh, limber.

Axel Janssen temp

  • Gast
Re:xslt Frage: nodes entfernen
« Antwort #5 am: 13.11.03 - 13:50:09 »
...ziemlich einfach zu lösen.

hmm. Das kenne ich. Bist du zufällig Informatik-Diplomand   ;D
Kannst du diese Aussage mit code belegen  :D

Grund1: es wird gesagt, dass xml-> text-Format Transformationen mit xslt  besser (performanter, leichter modifizierbar) sind als mit der xml-dom api.

Grund2: Irgendwie will ich ja xslt lernen  ;D

Gruß Axel

« Letzte Änderung: 13.11.03 - 13:54:55 von Axel Janssen temp »

Offline animate

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.540
  • Uh, I'm just gonna go find a cash machine.
    • LA2
Re:xslt Frage: nodes entfernen
« Antwort #6 am: 13.11.03 - 14:32:25 »
ich bin kein Diplomand.
ich habe auch keinen fertigen Code.
(Die NotesDOMNode-Klasse bietet die Methode removeChild an, mit der du deine Nodes löschen könntest)
Das war auch nur eine rein subjektive Aussage, weil ich mich eben mit dem DOM besser auskenne als mit XSL.

Die zwei Gründe, die du aufführst, sind auch die, die mich dazu bewegt haben, mich mit XSL zu beschäftigen (bin grade am scannen von O'Reillys XSLT Cookbook, darin habe ich aber auch noch keine Lösung für dein Problem gefunden)
Thomas

Fortunately, I'm adhering to a pretty strict, uh, drug, uh, regimen to keep my mind, you know, uh, limber.

Offline Gandhi

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 918
  • Geschlecht: Männlich
  • Domino for the masses
Re:xslt Frage: nodes entfernen
« Antwort #7 am: 19.11.03 - 14:42:22 »
Meine Erfahrungen mit xslt:
uat (Use another Tool).
xml direkt parsen und neu schreiben (unter php gibt es da sehr gute Tools - vermutlich auch für Java)
Ich finde xslt auch seehhr unübersichtlich....

By the way: Gibt es eigentlich auch einen nichtakademischen Nutzen von DTDs?
Der "Wenn ich" und der "Hätt' ich" das sind zwei arme Leut'
oder für den Süden:
Hatti Tatti Wari - san drei Larifari

Axel Janssen temp

  • Gast
Re:xslt Frage: nodes entfernen
« Antwort #8 am: 19.11.03 - 15:01:21 »
Meine Erfahrungen mit xslt:
uat (Use another Tool).
xml direkt parsen und neu schreiben (unter php gibt es da sehr gute Tools - vermutlich auch für Java)
Ich finde xslt auch seehhr unübersichtlich....

doch es geht. Ist gewöhnungsbedürftig, aber es ist möglich. V.a. braucht man gute Tools (XML-Spy, WSAD).
Man hat dann die Aufgabe der Transformation in dem Stylesheet gekapselt und keine Programmiersprachen-codezeilen, die sich damit beschäftigen (nur ca. 5 Zeilen für input-xml-Stream, xsl-stream, result-xml stream laden und Transformation durchführen).

Wirklich unübersichtlich ist sowieso nur das editieren von Notes4.5 kompatiblen komplexen Tabellen mit einen Haufen von hide-when Formeln. Das mache ich momentan und IMNSHO ist dies der Gipfel der Unübersichltlichkeit in der Geschichte der Computertechnologie. Nein. Ich kann das überhaupt nicht komisch finden.  

By the way: Gibt es eigentlich auch einen nichtakademischen Nutzen von DTDs?
Frag Ulrich Krause. Z.B. beim Konfigurations-xml für den IIS-ISAPI Konnektor für den SAP J2EE Server.

Viele xml-Dateien (z.B. auch dxl) sind per dtds, xml-schemas definiert. Falls Probleme auftreten ist es deshalb eine gute Idee, dtds zumindest lesen zu können. xml-schemas sind imho noch komplizierter als dtds.
Falls jemand z.B. sich jemand mit externen Geschäftspartner über xml austauschen will, sollten die sich immer auf einen vorhandenen Standard für den Aufbau der auszutauschenden xmls einigen (oder einen neuen definieren). Dieser Standard wird mit dtds oder (heute besser) mit xml-schemas definiert.
 
XML hat eine hohe Komplexität. Deshalb empfehle ich dringend gute Tools zu verwenden (wsad, xml-spy).
« Letzte Änderung: 19.11.03 - 15:05:16 von Axel Janssen temp »

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz