XSLT: <xsl:strip-space> ne fonctionne pas
J'ai un filtre de servlet dans mon application qui intercepte toutes les requêtes entrantes et tente de dépouiller les espaces de la prochaine XML et écrire le résultant "propre" XML de la réponse. Je suis à l'aide de XSLT pour atteindre cet objectif. Veuillez voir le XSLT ci-dessous:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" omit-xml-declaration="no" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Toutefois, cela ne fonctionne pas comme prévu. Le XML résultant est le même que l'original XML (en dépit de l'aide de l' <xsl:strip-space elements="*"/> dans la feuille de style.
S'il vous plaît aidez-moi obtenir ce droit.
Ce qui concerne,
- Ashish
OriginalL'auteur Vini | 2009-07-15
Vous devez vous connecter pour publier un commentaire.
À l'aide de la transformation xslt à partir de la question d'origine, un
<xsl:template match="text()"><xsl:value-of select="normalize-space(.)"/></xsl:template>
devrait faire l'affaire.OriginalL'auteur
Il n'est pas clair ce que vous voulez obtenir comme résultat, et ce que vous attendez de
xsl:strip-whitespace
en premier lieu. Mais une chose à noter est qu'il n'a pas de bande de tous espaces, mais seulement ce qui est jugé insignifiant en vertu du cadre "habituel" des règles. En particulier, à partir de XSLT 1.0 spec:Ainsi, par exemple, ceci:
sera dépouillé de:
parce qu'il avait 3 espaces-seulement les nœuds de texte (après
<foo>
et avant<bar>
, entre<bar>
et</bar>
, et après</bar>
et avant</foo>
).Note également que, parce que vous avez
<xsl:output indent="yes">
dans votre feuille de style, il finira par être transformé:dans la sortie.
D'autre part, ce:
Ne sera pas dépouillé, car tous les nœuds de texte qu'il contient ne sont pas purement des espaces nœuds.
Avez-vous jamais trouver une solution pour le parage texte copié nœuds?
Avez-vous regardé la deuxième réponse?
S'avère que mon problème était avec 0xA0 caractères de glisser, ce qui représente un espace de non-rupture des personnages. Rend comme un 0x20 l'espace standard pour les yeux, mais enfin compris.
OriginalL'auteur Pavel Minaev
L'ajout de cette seconde réponse, parce que l'explication dans le premier est toujours (je l'espère) informatif assez pour le garder.
En supposant que par la "garniture" tu veux dire "supprimer tous les espaces immédiatement après ouverture et avant la balise de fermeture", puis les autres règles de modèle devrait faire l'affaire:
Essayez la version mise à jour.
OriginalL'auteur Pavel Minaev