Question

J'utilise DITA OT pour transformer le XML en xhtml. Mon xsl ressemble

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

Si j'ai essayé d'exécuter cette xsl contre mon xml pour la transformation en utilisant xhtml pot DITA OT cmd.

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

Après l'exécution de la commande ci-dessus, je reçois l'erreur suivante.

[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 casser la tête pour savoir pourquoi cette erreur se produisant.

Merci.

Était-ce utile?

La solution

this document contains a top-level text node

Pouvez-vous nous montrer la fin de la feuille de style XSLT? Y at-il un texte après la </xsl:stylesheet> finale? Cela provoque cette erreur.

Mise à jour

Dimitre a souligné, les balises de début / fin <xsl:template> sont déséquilibrés, donc à moins que vous ne montrant une partie de votre XSLT, qui doit être fixé.

Cependant, je suis d'accord avec C @ Tim que vous ne voulez probablement pas vraiment une déclaration DOCTYPE du tout dans votre XSLT. Vous n'êtes pas essayer d'utiliser l'entité &nbsp; dans la feuille de style, vous essayez juste d'émettre une. Donc, si vous avez retiré la déclaration DOCTYPE de votre feuille de style, vous perdez rien.

En outre, contre @ Tim, il n'y a pas besoin d'un DOCTYPE de déclarer l'entité nbsp dans le code HTML de sortie, car il est déjà prédéfini en HTML.

Enfin, je différerait avec la méthode @ Tim pour fournir un espace insécable dans le code HTML. Disable-output-escaping est presque toujours la mauvaise approche, et est due à un manque de compréhension de la façon dont l'analyse et le travail de sérialisation. La meilleure façon de sortie un espace insécable dans XSLT est d'utiliser une entité numérique directement:

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

Ceci affichera un espace insécable.

"Mais," vous dites: "Je veux qu'il &nbsp; de sortie!"

Cela peut arriver; lorsque la sortie méthode = « html », sérialisation peut utiliser les entités de caractère construit en HTML pour exprimer des personnages comme celui-ci. Ou la sérialisation pourrait utiliser &#160; ou simplement intégrer un espace insécable directement. Tous sont HTML juridiques et toutes sont équivalentes. La question pour vous, alors, pourquoi voulez-vous qu'il sérialisé comme &nbsp; par opposition à un autre équivalent?

Si je vous ai mal compris ce que vous essayez de faire, s'il vous plaît expliquer plus loin, où vous voulez &nbsp; apparaisse, et pourquoi que les questions de forme particulière.

Autres conseils

Cela peut être à cause de la déclaration DOCTYPE que vous avez en haut de la page. Cela pourrait être le nœud de texte de niveau supérieur l'erreur fait référence aussi.

est quelque chose DOCTYPE que vous souhaitez apparaître dans le code HTML que vous créez? Si oui, il devrait probablement être retiré de l'endroit où il est, et dans votre premier modèle, procédez comme suit:

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

Ensuite, lorsque le XSLT est transformé, il affichera les éléments suivants

<!DOCTYPE some_name [  <!ENTITY nbsp "&#160;">  ]> 
<html>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top