Comment puis-je supprimer les espaces dans toutes les valeurs d'attribut à l'aide de xslt?
Je veux supprimer les espaces de tous les attributs dans mon xmls à l'aide de xslt. J'ai utilisé strip-space
, mais qui supprime les espaces à partir des nœuds.
Mon xml d'entrée est:
<OrderList>
<Order OrderDate="26-July" OrderNo="ORDER 12345"
CustomertName="JOHN DOE" OrderKey="ORDKEY12345">
<ShipAddress AddressLine="ABC Colony" FirstName="John" LastName="Doe "/>
</Order>
</OrderList>
et le xsl j'ai utilisé pour se débarrasser de la présence d'espaces dans les attributs comme CustomertName="JOHN DOE"
est:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="xml" indent="yes"/>
<xsl:strip-space elements="*" />
<xsl:template match="/">
<xsl:apply-templates/>
<OrderList>
<xsl:for-each select="OrderList/Order">
<xsl:element name="Order">
<xsl:copy-of select="@OrderDate"/>
<xsl:copy-of select="@OrderNo"/>
<xsl:copy-of select="@CustomertName"/>
<!-- ShipAddress begins -->
<xsl:element name="ShipAddress">
<xsl:copy-of select="ShipAddress/@AddressLine"/>
<xsl:copy-of select="ShipAddress/@FirstName"/>
<xsl:copy-of select="ShipAddress/@LastName"/>
</xsl:element>
</xsl:element>
</xsl:for-each>
</OrderList>
</xsl:template>
</xsl:stylesheet>
Mais cela laisse à l'entrée xml comme il l'a été. Je veux supprimer les espaces à partir des valeurs d'attribut à tous les niveaux.
OriginalL'auteur SMA_JAVA | 2012-08-21
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser la fonction de traduction, comme si, mais il serait judicieux de revoir cela avec un modèle d'appel:
pour la bande juste avant et arrière de l'espace, l'utilisation de normalize-space(@CustomertName)
OriginalL'auteur StuartLC
Si vous voulez juste supprime les espaces à partir des valeurs des attributs, vous pouvez simplement créer un modèle pour correspondre à n'importe quel attribut, puis d'utiliser la fonction de traduction.
Et si vous souhaitez filtrer certains attributs, vous pouvez créer des modèles pour correspondre, et puis de les ignorer. (XSLT va correspondre à la plus spécifique du modèle de première)
Vous pouvez également vous simplifier le code un peu en faisant usage de l'identité de transformation pour faire face nœuds existants. Ici, c'est la pleine XSLT
Lorsqu'il est appliqué à votre XML exemple, la suite est sortie
L'avantage de cette approche est qu'il fonctionne avec n'importe quel document XML.
Si vous voulais le faire uniquement pour des éléments spécifiques, essayez cette XSLT à la place explicitement correspond aux attributs que vous voulez (et ignore tous les autres)
EDIT: Si vous souhaitiez supprimer que les grands et les espaces à droite, puis "normaliser" l'espace-est votre ami.
Ne remarque cela permettra d'éliminer l'excès d'espaces à l'intérieur de l'attribut (c'est-à-dire double-espaces deviennent des espaces simples entre les mots).
J'ai édité ma réponse.
normalize-space
est la fonction vous avez probablement besoin!Hey mais une chose...je suis aussi en filtrant certains attributs, si vous voyez mon xsl, OrderList\Commande\@OrderKey n'était pas là. Mais si j'utilise votre xsl, il ne filtrent pas OrderKey, il suffit de copier tous les attributs moins l'attaque et de fuite des espaces. Certains de plus d'aide, veuillez...
J'ai élargi la réponse à montrer comment vous pouvez exclure des attributs spécifiques
okk...alors disons que j'ai déjà le xsl créé qui ressemble à la première xsl et je ne veux pas changer grand chose mis à part l'ajout d'un peu de retirer de l'attaque et de fuite des espaces...pour votre code, nous sommes effectivement en ajoutant les attributs qui nécessitent un retrait, mais mon xsl seulement a les attributs qui doit être passé. Lorsque j'utilise les espaces de suppression de bits avec mon xsl, il donne le xml sans espaces, mais aussi avec qui ajoute de l'entrée d'origine xml...et donc, on dirait que...
OriginalL'auteur Tim C