Announcement

Collapse
No announcement yet.

XML-Verarbeitungsfehler: Nicht übereinstimmendes Tag. Erwartet: </META>

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

  • XML-Verarbeitungsfehler: Nicht übereinstimmendes Tag. Erwartet: </META>

    Hallo,

    ich versuche via Java eine Transformation durchzuführen und bekomme folgenden Fehler: XML-Verarbeitungsfehler: Nicht übereinstimmendes Tag. Erwartet: </META>

    die XSL-Datei ist so aufgebaut:

    HTML Code:
    <?xml version="1.0" encoding="utf-8"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <!--xsl:output method="html" indent="yes"     
        media-type="text/html" 
        doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
        doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"/-->
        
        <xsl:output method="html"/>
    	
    	<!-- Root node -->
    	<xsl:template match="/">
    		<html>
    			<head>
    			
    				<title> xyz
    
    </title>
    			</head>
    			<body>
    				<h1 style="text-align: center; color:rgb(51,51, 255)"> <xsl:value-of select="../GeneralDetails/xyz/text()"/></h1>
    				<xsl:apply-templates/>
    			</body>
    		</html>
    	</xsl:template>
    Wenn ich das gleiche im XMLSpy versuche, dann ist alles richtig d.h. HTML-Seite wird richtig angezeigt. Ich benutze eine Version von Xalan: xalan-j_2_7_1

    kann mir jemand helfen? Danke..

    viele Grüße

  • #2
    Wie sieht denn das Dokument aus, dass das Stylesheet verarbeiten soll? Der Fehler scheint nicht direkt vom Stylesheet oder Xalan zu kommen, eher vom XML-Parser beim Einlesen des Eingabedokumentes, oder eventuell auch bei der weiteren Verarbeitung des Resultates der XSLT-Transformation. Aber dann musst du genauer erklären, was du mit dem Resultat machst.

    Comment


    • #3
      Originally posted by Martin Honnen View Post
      Wie sieht denn das Dokument aus, dass das Stylesheet verarbeiten soll? Der Fehler scheint nicht direkt vom Stylesheet oder Xalan zu kommen, eher vom XML-Parser beim Einlesen des Eingabedokumentes, oder eventuell auch bei der weiteren Verarbeitung des Resultates der XSLT-Transformation. Aber dann musst du genauer erklären, was du mit dem Resultat machst.
      HTML Code:
      <?xml version="1.0" encoding="UTF-8"?>
      <GeneralDetails TimeStamp="13:20:54 20:07:2010">
      	<OpearionsType>c</OpearionsType>
      	<MacroStepName Version="">ert</MacroStepName>
      	<MacroStepComment>rrrrr</MacroStepComment>
      	<SubStep Version=""></SubStep> 
      	<Date>20.07.2010</Date>
      	<LotName>rrrr</LotName>
      </GeneralDetails>

      Comment


      • #4
        Weder das XML-Dokument noch das Stylesheet enthalten ein ungeschlossenes META-Element, dass die genannte Fehlermeldung verursachen könnte.
        Der Fehler entsteht also an einer anderen Stelle. Das Resultat des Stylesheet mit output method="html" ist ein HTML-Dokument, wobei ein meta-Element generiert wird, und zwar in der HTML/SGML-Syntax, also
        Code:
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        Wenn man dann versucht, dieses HTML-Dokument mit einem XML-Parser zu verarbeiten, wird es die genannte Fehlermeldung geben.

        Comment


        • #5
          Verwende als XHTML-Ausgabemethode method="xml" statt method="html" (bei XSLT 2.0 auch method="xhtml" möglich). Dann sollte das vom Prozessor erzeugte meta-Element entsprechend abgeschlossen werden.

          Comment


          • #6
            ja schon aber wer erzeugt dieses "meta"-Element und das passiert nachdem ich xalan-j_2_7_1 verwende....

            Comment


            • #7
              Mit method="xml" wird überhaupt kein meta-Element ausgegeben werden. Ob das aber gewünscht ist, wenn das Stylesheet HTML erzeugt, kann nur Markus beantworten. Bis jetzt hat er nicht erklärt, wie das Stylesheet-Resultat genau verarbeitet wird.

              Comment


              • #8
                Originally posted by markus1980 View Post
                ja schon aber wer erzeugt dieses "meta"-Element und das passiert nachdem ich xalan-j_2_7_1 verwende....
                Mit output method="html" ist es Aufgabe des XSLT-Prozessors, ein meta-Element zu erzeugen, siehe http://www.w3.org/TR/xslt#section-HTML-Output-Method. Das ist auch sinnvoll, wenn das Dokument dann als text/html an einen Browser ausgeliefert wird.
                Aber du scheinst das Dokument dann mit einem XML-Parser zu verarbeiten, der dann folgerichtig einen Fehler meldet.

                Comment


                • #9
                  @Martin Honnen: was meinst Du mit "XML-Parser", ich tue es einfach so bearbeiten, ist da etwas falsch? oder anders gefragt, wie kann ich dieses Problem umgehen?

                  Code:
                  Source xmlSource    = new StreamSource(new File("C:\\temp\\WorkActionVariablesExample.xml")); 
                          Source xsltSource   = new StreamSource(new File("C:\\temp\\document.xsl"));
                          //Source xmlSource    = new StreamSource(new File("C:\\temp\\changes.xml")); 
                          //Source xsltSource   = new StreamSource(new File("C:\\temp\\changes.xsl"));
                          
                          TransformerFactory transFact    = TransformerFactory.newInstance();
                          Transformer trans               = transFact.newTransformer(xsltSource);
                          
                          StringWriter stringWriter = new StringWriter();
                          File temp = File.createTempFile("in1", ".xml");
                          trans.transform(xmlSource, new StreamResult(temp));
                          
                          String output = stringWriter.toString();
                          stringWriter.close();
                          
                          Runtime.getRuntime().exec("C:\\Programme\\Mozilla Firefox\\firefox.exe" + " " + temp.getPath());

                  Comment


                  • #10
                    Schreibe das meta-Element direkt in die Ausgabe:
                    Code:
                    <?xml version="1.0" encoding="UTF-8"?>
                    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                      xmlns="http://www.w3.org/1999/xhtml">
                    
                     <xsl:output method="xml" indent="yes"
                        media-type="text/html" 
                        doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
                        doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"/>
                    
                      <xsl:template match="...">
                        <html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de">
                          <head>
                            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
                            <title>...</title>        
                          </head>
                          <body>
                            <xsl:apply-templates select="..."/>
                          </body>
                        </html>    
                      </xsl:template>
                    
                    </xsl:stylesheet>

                    Comment


                    • #11
                      Originally posted by markus1980 View Post
                      @Martin Honnen: was meinst Du mit "XML-Parser", ich tue es einfach so bearbeiten, ist da etwas falsch? oder anders gefragt, wie kann ich dieses Problem umgehen?

                      Code:
                      Source xmlSource    = new StreamSource(new File("C:\\temp\\WorkActionVariablesExample.xml")); 
                              Source xsltSource   = new StreamSource(new File("C:\\temp\\document.xsl"));
                              //Source xmlSource    = new StreamSource(new File("C:\\temp\\changes.xml")); 
                              //Source xsltSource   = new StreamSource(new File("C:\\temp\\changes.xsl"));
                              
                              TransformerFactory transFact    = TransformerFactory.newInstance();
                              Transformer trans               = transFact.newTransformer(xsltSource);
                              
                              StringWriter stringWriter = new StringWriter();
                              File temp = File.createTempFile("in1", ".xml");
                              trans.transform(xmlSource, new StreamResult(temp));
                              
                              String output = stringWriter.toString();
                              stringWriter.close();
                              
                              Runtime.getRuntime().exec("C:\\Programme\\Mozilla Firefox\\firefox.exe" + " " + temp.getPath());
                      Du musst dich entscheiden, wenn du HTML erzeugen willst und direkt als Datei in Firefox laden willst, dann nimm die Dateiendung .html für das Resultat und benutze weiter output method="html". Oder entscheide dich, XML oder XHTML zu erzeugen, dann nimm output method="xml" und die Dateiendung .xml oder .xhtml.
                      Im Moment erzeugst du ein HTML-Dokument mit Dateiendung .xml, was Firefox dann mit dem XML-Parser verarbeitet, und der meckert folgerichtig.

                      Comment


                      • #12
                        das habe ich auch schon mal versucht und es funz auch nicht. Dann werden zwei meta-Element in dem Html - Dokument auftauchen...

                        Comment


                        • #13
                          Vielen Dank, es funktionier, ich benutze jetzt die Dateiendung .html.
                          Es bleibt aber immer noch die Frage warum der parser versucht dieses meta-Element hinzufügen.

                          Comment


                          • #14
                            Ein Parser fügt nichts hinzu. Aber der XSLT-Prozessor macht das bei der Ausgabe von HTML, da es die XSLT-Spezifikation so will. Und die will es so, da HTML nun mal ein meta-Element benutzt, um die Kodierung des Dokumentes anzugeben. Sonst könnte ein Browser oder genereller HTML user agent nicht wissen, wie er ein Dokument dekodieren soll, um Zeichen korrekt zu erkennen, dafür muss nun mal die Kodierung (wie UTF-8 oder ISO-8859-1) bekannt sein.
                            Mit XML erledigt dass die XML-Deklaration.

                            Comment


                            • #15
                              Originally posted by Martin Honnen View Post
                              Ein Parser fügt nichts hinzu. Aber der XSLT-Prozessor macht das bei der Ausgabe von HTML, da es die XSLT-Spezifikation so will. Und die will es so, da HTML nun mal ein meta-Element benutzt, um die Kodierung des Dokumentes anzugeben. Sonst könnte ein Browser oder genereller HTML user agent nicht wissen, wie er ein Dokument dekodieren soll, um Zeichen korrekt zu erkennen, dafür muss nun mal die Kodierung (wie UTF-8 oder ISO-8859-1) bekannt sein.
                              Mit XML erledigt dass die XML-Deklaration.
                              ja schon aber warum wird dieser Tag nicht ordnungsgemäß abgeschlossen?
                              d.h. <META> bla bla </META>

                              Comment

                              Working...
                              X