Announcement

Collapse
No announcement yet.

xsl:result-document funktioniert nicht

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • xsl:result-document funktioniert nicht

    Hallo,

    ich erstelle auf mein erstes Thema gleich ein zweites. Einen ersten Fehler konnte ich in einem anderen Thema beheben. Ich beginnen nun ein neues, da es Thematisch was anderes ist. Ich denke das dient der Übersicht und andere Könne für ihre Probleme Lösungen finden.

    Folgendes: Ich benutze XSLT 2.0 und möchte mit <xsl:result-document> ein Dokoument in verschieden Einzeldokumente zerlegen. Ich habe den Befehl in einem anderen Projekt bereits angewendet. Ich mache in meinem Beispiel meiner Meinung nach nichts anders. Aber es werden keine Dateien erzeugt. Vermutlich habe ich einen Fehler aus Betriebsblindheit übersehen. Wäre sehr nett wenn sich das jemand mal anschauen könnte.

    Code XHTML:
    Code:
    <!DOCTYPE html
      PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html>
       <head>
          <title>Bla</title>
       </head>
       <body>
          <div id="produkt2">
             <h1>Blabla</h1>
             <h2>Blabla </h2>
             <p>Blabla </p>
          </div>
          <div id="produkt3">
             <h1>Blabla</h1>
             <h2>Blabla </h2>
             <p>Blabla </p>
          </div>
     ...
    </body>
    </html>
    Code XSLT

    Code:
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:html="http://www.w3.org/1999/xhtml"
      version="2.0" exclude-result-prefixes="#all">
        
        
        
        <xsl:template match="div">
        <xsl:result-document method="xhtml" href='html/{@id}.html'>
          <html>
            <head><title>Blub</title></head>
            <body>        
                <xsl:value-of select=".">
            </body>
           </html>  
          
               
         </xsl:result-document>   
            
        </xsl:template>
    </xsl:stylesheet>
    Ich habe in dem Verzeichnis in dem die Dokumente liegen einen html Ordner erzeugt. Der Befüllt sich jedoch nicht. Den ausdruck für "href" habe ich auch schon vereinfacht. Kein Erfolg.
    Ich arbeite mit Oxygen und Saxon-HE 9.4.0.4. Ich habe das ganze auch schon mit einer Batch-Datei versucht anzuschieben. Tut sich nichts.
    Die Batch-Datei schaut so aus:
    Code:
     
    rem java -jar saxon\saxon9he.jar : transformiert1.html 20DatenSplitten.xsl
    
    pause
    der Saxon liegt auch im Ordner saxon. Dann steht dahinter die Quelldatei und die Transformationsdatei. Zieldatei benötige ich ja nicht, da dies ja vom Result-Document erledigt wird.

    Ich komme einfach nicht drauf, was ich falsch mach. Danke für Eure Hilfe.

  • #2
    So der XML-Parser die DTD des Eingabedokumentes liest, die vermutlich einen "default namespace" für XHTML als http://www.w3.org/1999/xhtml als Attribut für das "html"-Wurzelelement definiert, musst du dein Stylesheet anpassen:

    [highlight=xml]
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xpath-default-namespace="http://www.w3.org/1999/xhtml"
    version="2.0" exclude-result-prefixes="#all">



    <xsl:template match="div">
    <xsl:result-document method="xhtml" href='html/{@id}.html'>
    <html>
    <head><title>Blub</title></head>
    <body>
    <xsl:value-of select=".">
    </body>
    </html>


    </xsl:result-document>

    </xsl:template>
    </xsl:stylesheet>
    [/highlight]

    Oder aber

    [highlight=xml]
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:html="http://www.w3.org/1999/xhtml"
    version="2.0" exclude-result-prefixes="#all">



    <xsl:template match="html:div">
    <xsl:result-document method="xhtml" href='html/{@id}.html'>
    <html>
    <head><title>Blub</title></head>
    <body>
    <xsl:value-of select=".">
    </body>
    </html>


    </xsl:result-document>

    </xsl:template>
    </xsl:stylesheet>
    [/highlight]

    Comment


    • #3
      xsl:copy-of ist wohl plausibler, um den jeweiligen div-Inhalt zu reproduzieren:

      [highlight=xml]<?xml version="1.0" encoding="UTF-8"?>
      <xsl:stylesheet version="2.0"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      xmlns:html="http://www.w3.org/1999/xhtml"
      exclude-result-prefixes="#all"
      xpath-default-namespace="http://www.w3.org/1999/xhtml">

      <xsl:template match="div">
      <xsl:result-document method="xhtml" href="html/{@id}.html">
      <html>
      <head>
      <title>Blub</title>
      </head>
      <body>
      <xsl:copy-of select="."/>
      </body>
      </html>
      </xsl:result-document>
      </xsl:template>

      </xsl:stylesheet>[/highlight]

      Comment


      • #4
        Ich stimme zu, das ein copy-of plausibler ist. Aber da stimmt noch einiges nicht, auch wenn es nicht Ursache des Problemes ist. So sollte mit result-document method="xhtml" auch der XHTML-Namensraum für die Resultatselemente gesetzt werden, also

        [highlight=xml]
        <xsl:stylesheet version="2.0"
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        xmlns:html="http://www.w3.org/1999/xhtml"
        exclude-result-prefixes="#all"
        xpath-default-namespace="http://www.w3.org/1999/xhtml">

        <xsl:template match="div">
        <xsl:result-document method="xhtml" href="html/{@id}.html">
        <html xmlns="http://www.w3.org/1999/xhtml">
        <head>
        <title>Blub</title>
        </head>
        <body>
        <xsl:copy-of select="."/>
        </body>
        </html>
        </xsl:result-document>
        </xsl:template>

        </xsl:stylesheet>
        [/highlight]

        oder vermutlich besser (sobald mehr als ein Template XHTML erzeugen soll):

        [highlight=xml]
        <xsl:stylesheet version="2.0"
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        xmlns:html="http://www.w3.org/1999/xhtml"
        xmlns="http://www.w3.org/1999/xhtml"
        exclude-result-prefixes="#all"
        xpath-default-namespace="http://www.w3.org/1999/xhtml">

        <xsl:template match="div">
        <xsl:result-document method="xhtml" href="html/{@id}.html">
        <html>
        <head>
        <title>Blub</title>
        </head>
        <body>
        <xsl:copy-of select="."/>
        </body>
        </html>
        </xsl:result-document>
        </xsl:template>

        </xsl:stylesheet>
        [/highlight]

        Comment


        • #5
          Danke Jungs!
          Martin, schön das du bei alternative dargelegt hast. So lernt man was!
          Thomas Richtig. Ich wollte mit Copy-of arbeiten.

          Mit den Namespaces da komm ich irgendwie immer ins schleudern. Das ist etwas das mir nicht so leicht von der Hand geht. Ich muss mich da nochmal richtig einlesen. So ganz kapiert hab ich das noch nicht. Das kommt noch!
          Ich Danke euch nochmals und wünsche eich einen guten Rutsch.

          Comment

          Working...
          X