Pregunta

Estoy usando DITA OT para transformar el XML en XHTML. Mi XSL parece

<?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>

Ahora, si intenté ejecutar este XSL contra mi XML para la transformación XHTML usando DITA OT JAR CMD.

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

Después de ejecutar el comando anterior, recibo el siguiente error.

[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

Me estoy rompiendo la cabeza para descubrir por qué está ocurriendo este error.

Gracias.

¿Fue útil?

Solución

this document contains a top-level text node

¿Puedes mostrarnos el final de la hoja de estilo XSLT? ¿Hay algún texto después de la final </xsl:stylesheet>? Eso causaría este error.

Actualizar

Como señaló Dimitre, el <xsl:template> Las etiquetas de inicio/final están desequilibradas, por lo que a menos que solo esté mostrando parte de su XSLT, que debe solucionarse.

Sin embargo, estoy de acuerdo con @tim C en que probablemente no quiera una declaración de doctype en su XSLT. No estás tratando de usar el &nbsp; Entidad en la hoja de estilo, solo estás tratando de emitir una. Entonces, si eliminó la declaración DOCTYPE de su hoja de estilo, no perdería nada.

Además, contra @tim, no hay necesidad de un doctype para declarar el nbsp Entidad en la salida HTML, porque ya está predefinida en HTML.

Finalmente, diferiría con @Tim en el método para generar un espacio no roto en el HTML. Deshabilitar el envío de salida es casi siempre el enfoque incorrecto, y se debe a la falta de comprensión de cómo funcionan el análisis y la serialización. La forma más fácil de generar un personaje espacial no roto en XSLT es usar una entidad numérica directamente:

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

Esto generará un espacio no roto.

"Pero", dices, "quiero que salga &nbsp;!"

Eso puede suceder; Cuando la salida-method = "html", la serialización puede usar las entidades de caracteres integradas en HTML para expresar caracteres como este. O la serialización podría usar &#160; o simplemente incrustar un personaje espacial no roto directamente. Todos son HTML legales, y todos son equivalentes. La pregunta para ti, entonces, es por qué quieres que sea serializada como &nbsp; ¿A diferencia de algún otro equivalente?

Si he entendido mal lo que estás tratando de hacer, explique más, dónde quieres &nbsp; aparecer, y por qué esa forma en particular importa.

Otros consejos

Esto puede deberse a la declaración de doctype que tiene en la parte superior de la página. Este podría ser el nodo de texto de nivel superior, el error también se refiere.

¿Es el doctype algo que desea aparecer en el HTML que está creando? Si es así, probablemente debería eliminarse de donde está, y en su primera plantilla, haga lo siguiente:

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

Luego, cuando se transforma el XSLT, emitirá lo siguiente

<!DOCTYPE some_name [  <!ENTITY nbsp "&#160;">  ]> 
<html>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top