ritschmanhard: xml postprocessing, 2 stufige transformation

Hallo!
Ich hab ein übles Problem, welches ich für den IE schon mal gelöst habe, nun aber für netscape lösen muss:

1. Ich habe eine XML Datei (start.xml).
start.xml:

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="test.xsl" ?>
<document>
<item>
   <key>7</key>
   <key>33</key>
   <data>bla</data>
</item>
<item>
   <key>8</key>
   <key>35</key>
   <data>bla</data>
</item>
</document>

2. Ich erzeuge mittels xsl (siehe xsl:output) ein derivat, welches wieder eine xml Datei darstellt.
test.xsl

<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="xml" indent="yes" encoding="ISO-8859-1" omit-xml-declaration="no" version="1.0"<?xml version="1.0" encoding="ISO-8859-1"?>

<xsl:template match="/">
  <xsl:processing-instruction name="xml-stylesheet">
    xsl:texthref="postProcessing.xsl" type="text/xsl"</xsl:text>
  </xsl:processing-instruction>
  <document>
    <xsl:apply-templates />
  </document>
</xsl:template>

<xsl:template match="item">
 <xsl:element name="item">
     <xsl:for-each select="./.">
        <xsl:copy-of select="."/>
     </xsl:for-each>
     <xsl:element name="superkey">
        <xsl:value-of select="./key[0]"/>
        <xsl:value-of select="./key[1]"/>
     </xsl:element>
 </xsl:element>
</xsl:template>

3. Es entsteht eine xml Datei (sei output.xml) folgender Art (diese wird allerdings in Browser nicht wie gewohnt als xml Datei mit klappbaren Knoten angezeigt, sondern der Inhalt der Tags wird nacheinander einfach ausgegeben, die Ausgabe wurde mit xsltproc unter SUSE erzeugt):

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="postProcessing.xsl" ?>
<document>
<item>
   <key>7</key>
   <key>33</key>
   <data>bla</data>
   <superkey>733</superkey>
</item>
<item>
   <key>8</key>
   <key>35</key>
   <data>bla</data>
   <superkey>835</superkey>
</item>
</document>

4. Die von mir erwartete xsl Transformation von output.xml mittels postProcessing.xsl findet nicht mehr statt.

Was mache ich bei der zweistufigen Transformation falsch?
(Unter IE stand das msxmldom object zur Verfügung, mittels dessen eine Transformation möglich war, dieses fehlt bei netscape und firefox).

Ich bitte um Eure Hilfe und danke im Voraus,

Euer Richard

P.S.: Bitte keine Tips zur Erzeugung des test.xml oder "warum brauchst du denn den superkey?". Ich habe das Beispiel sehr vereinfacht und benötige trotzdem eine Lösung für dieses Basisproblem.

  1. Hallo,

    Was mache ich bei der zweistufigen Transformation falsch?

    An sich nichts. Aber die Transformiix-Version in Mozilla/FF parst die erzeugte Ausgabe nicht nochmal.

    (Unter IE stand das msxmldom object zur Verfügung,

    Das läßt darauf schließen, dass du Scpriting verwendet hast. Das wäre auch in FF möglich, allerdings müsstest du wohl den Weg über HTML gehen, wie Z.B. hier http://developer.mozilla.org/en/docs/The_XSLT/JavaScript_Interface_in_Gecko:Advanced_Example
    In verbindung damit kann dir "DOMParser" oder "XMLSerializer" http://xulplanet.com/references/objref/#xml helfen.

    Grüße
    Thomas

    PS:

    PS: Bitte keine Tips zur Erzeugung

    Na gut, dann brauchst du ja wohl auch nicht zu wissen, dass in XSLT keine position() mit dem Wert 0 gibt (key[0]). etc.

    1. Hallo Thomas!

      Danke für Deine Tips (und auch für den key[0] Hinweis, aber das Beispiel hab ich halt schnell runtergetippt...).

      Liebe Grüsse,
      Richard Holderied