Domanda

Sto usando DITA OT per trasformare l'XML in XHTML. Il mio aspetto XSL come

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE some_name [ 
<!ENTITY nbsp "&#160;"> 
]>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:saxon="http://icl.com/saxon" extension-element-prefixes="saxon">


 <xsl:import href="../map2xhtmtoc.xsl"/>
 <!--<xsl:import href="result-doc.xsl"/>-->
 <!--<xsl:import href="custom-ecollege-dita2xhtml.xsl"/>-->
 <xsl:output name="html" method="html" indent="yes" encoding="UTF-8"/>

 <!-- Define a newline character -->
 <xsl:variable name="newline">
  <xsl:text>
  </xsl:text>
 </xsl:variable>

 <xsl:template match="/">
    <html>
    <head>
      <body>
          <xsl:apply-templates select="myProduct"/>
      </body>
    </head>
    </html>
 </xsl:template>
 <!--other templates goes here-->
 <div class="floatRight"/>
 <div class="headerSeparator">
  <xsl:text disable-output-escaping="yes">&amp;nbsp;</xsl:text>
 </div>
 </xsl:template>

 </xsl:stylesheet>

Ora, se ho cercato di eseguire questo xsl contro il mio xml per la trasformazione xhtml utilizzando DITA OT vaso cmd.

java -jar .\lib\dost.jar /i:samples/mycompany/myContent/myContent.ditamap /transtype:xhtml /xsl:xsl/mycompany/custom-map2xhtml.xsl

Dopo l'esecuzione del comando precedente, sto ottenendo il seguente errore.

[xslt] D:\DITA-OT1.5.2\xsl\mycompany\custom-map2xhtm.xsl:21: Fatal Error! When 'standalone' or 'doctype-system' is specified, the document must be well-formed; but this document contains a top-level text node
[xslt] Failed to process null

Am rompendo la testa per scoprire perché questo errore è in corso.

Grazie.

È stato utile?

Soluzione

this document contains a top-level text node

Ci può indicare la fine del foglio di stile XSLT? C'è qualche testo dopo il </xsl:stylesheet> finale? Che potrebbe causare questo errore.

Aggiorna

Come Dimitre sottolineato, l'inizio <xsl:template> / tag di chiusura sono sbilanciati, quindi a meno che non si sta mostrando solo una parte della vostra XSLT, che deve essere fissato.

Tuttavia, sono d'accordo con @ Tim C che probabilmente non si vuole veramente una dichiarazione DOCTYPE a tutti nel vostro XSLT. Non stai cercando di utilizzare l'entità &nbsp; nel foglio di stile, si sta solo cercando di emettere una. Quindi, se è stata rimossa la dichiarazione DOCTYPE dal vostro foglio di stile, si perderebbe nulla.

Inoltre, contra @ Tim, non v'è alcuna necessità di un DOCTYPE di dichiarare l'entità nbsp nel codice HTML di uscita, perché è già predefiniti in HTML.

Infine, può essere diverso con @ Tim sul metodo per l'emissione di uno spazio unificatore nel codice HTML. Disable-output-fuga è quasi sempre l'approccio sbagliato, ed è dovuto ad una mancanza di comprensione di come l'analisi e il lavoro di serializzazione. Il modo più semplice per emettere un carattere di spazio non-breaking in XSLT è quello di utilizzare direttamente un'entità numerico:

<div class="headerSeparator">&#160;</div>

Questa uscita volontà di uno spazio non-breaking.

"Ma", tu dici: "io voglio che &nbsp; uscita!"

che può accadere; quando l'uscita-method = "html", la serializzazione può utilizzare le entità carattere incorporati in HTML per esprimere personaggi come questo. O la serializzazione potrebbe usare &#160; o semplicemente inserire direttamente un carattere non-breaking spazio. Tutti sono HTML legale, e tutti sono equivalenti. La domanda per voi, allora, è perché vuoi che serializzato come &nbsp; al contrario di qualche altro equivalente?

Se ho frainteso quello che stai cercando di fare, si prega di spiegare ulteriormente, in cui si desidera che appaia &nbsp;, e perché quella particolare forma questioni.

Altri suggerimenti

Questo può essere a causa della dichiarazione DOCTYPE si ha nella parte superiore della pagina. Questo potrebbe essere il nodo di testo di livello superiore l'errore si riferisce anche.

E 'la DOCTYPE qualcosa che si desidera comparire nel codice HTML che si sta creando? Se è così, probabilmente dovrebbe essere rimosso da dove è, e nel tuo primo modello, procedere come segue:

<xsl:template match="/">
   <xsl:text disable-output-escaping = "yes"><![CDATA[
      <!DOCTYPE some_name [  <!ENTITY nbsp "&#160;">  ]> 
   ]]>
   </xsl:text>

Poi, quando il XSLT si trasforma, il risultato sarà il seguente

<!DOCTYPE some_name [  <!ENTITY nbsp "&#160;">  ]> 
<html>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top