2009-08-06 7 views
0

Une partie du XML:XSL disable-output-escaping supprime les espaces blancs

<text><b>Title</b> <b>Happy</b></text> 

Dans mon XSL je:

<xsl:value-of select="text" disable-output-escaping="yes" /> 

Ma sortie devient

**TitleHappy** 

Mon espacement a disparu - il doit y avoir un espace entre </b> et <b>. J'ai essayé normalize-space(), cela ne fonctionne pas.

Des suggestions? Merci!

+1

Votre exemple fonctionne pour moi. Quel analyseur xml et quel processeur xslt utilisez-vous, peut-être que l'analyseur supprime déjà les espaces avant que la transformation ne soit appelée? –

+0

Fonctionne pour moi aussi. Votre question manque un détail petit mais significatif, évidemment. – Tomalak

+0

quand je mis disable-output-escaping = « no » ma sortie devient TitreBonne J'essaie toujours de voir s'il y a des informations pertinentes –

Répondre

1

si vous voulez des espaces d'un xsl, utilisez: < xsl: text> </xsl: text>

espaces blancs ne se conserve que si ses reconnus comme un nœud de texte (ex: "un" deux espaces seront être reconnu)

les espaces de xml source orignal doit être préservée en disant à l'analyseur (par exemple)

parser.setPreserveWhitespace (true);

+0

Donc, je suppose que l'espace entre les et n'est pas conservé car il n'est pas reconnu comme un nœud de texte? De toute façon pour aller le préserver et le montrer comme sortie? –

+0

J'ai confondu votre source avec xsl (donc la méthode xsl: text ne marchera pas). J'ai peur que l'analyseur xml supprime les espaces dans votre source-xml. Si vous ajoutez un autre caractère non-espace, il sera reconnu comme textnode et préservera ainsi l'espace (au moins une fois). Je regarderais de près les options de votre analyseur XML et lui ferais gagner des espaces. Sinon, un   (ou   - espace insécable) est la seule chose qui pourrait aider. – Niko

0

En tant que votre émission en sortie HTML, vous pouvez remplacer votre espace avec un espace  

+0

Merci. J'utilise actuellement votre suggestion. –

0

insécable Avez-vous un contrôle sur la génération du XML d'origine? Si c'est le cas, vous pouvez essayer d'ajouter xml: space = "preserve" à l'élément de texte qui devrait indiquer au processeur de conserver les espaces.

<text xml:space="preserve"><b>Title</b> <b>Happy</b></text> 

Vous pouvez aussi regarder l'élément "xsl: preserve-space" dans XSLT.

<xsl:preserve-space elements="text"/> 

Bien que je n'ai jamais utilisé cela personnellement, il pourrait être utile. Voir W3Schools pour plus d'informations.

+0

Je n'ai aucun contrôle sur le XML original. = ( J'ai essayé de préserver l'espace, il ne fonctionne pas. Découvert il est un réglage par défaut de toute façon. L'espace a disparu que lorsque les balises gras sont utilisés. Titre Happy me retourner encore Titre Happy Bizarre. –

0

merci pour la contribution de tout le monde. Actuellement, j'utilise la suggestion de MattH qui consiste à tester l'espace et à substituer l'espace insécable. Une autre méthode que je pensais est de tester pour "</b> < b>" et remplacer par "</b> < b>". L'espace contient au sein d'une balise en gras sont réellement sortie. Les deux méthodes ont fonctionné. Je ne sais pas quelles sont les implications. Et je ne peux toujours pas comprendre pourquoi l'espacement est enlevé quand il est trouvé entre 2 étiquettes audacieuses séparées.

Questions connexes