Comment éviter la perte des espaces lors d'une transformation xslt ? [Résolu]

virgul 76 Messages postés mercredi 12 janvier 2005Date d'inscription 21 février 2008 Dernière intervention - 20 juil. 2006 à 15:30 - Dernière réponse : cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention
- 4 août 2006 à 22:01
Bonjour,

Voila j'ai un webservice qui me fait une transformation xslt mais le seul problème c'est qu'il me tronque les espaces que j'ai entre mes balises. Car il s'agit d'un des but de la transformation...

Ave XMLSpy ca ne le fait pas pouvez-vous m'aidez à corriger le tir? Pour que j'y arrive aussi avec mon Webservice

Mon code en C#:


<!-- BEGIN TEMPLATE: bbcode_code -->






                    XslTransform trXslt = new XslTransform();
                    StringWriter result = new StringWriter();
                    XmlDocument docresp = new XmlDocument();
                    XmlUrlResolver resolve = new XmlUrlResolver();
                    XPathNavigator navDoc = docTabMust.CreateNavigator();
                    trXslt.Load(ConfigurationManager.AppSettings["infopath"]);
                    trXslt.Transform(navDoc, null, result, resolve);
                    docresp.LoadXml(result.ToString());
                    return docresp;

 un XML d'exemple :
<?xml version="1.0" encoding="UTF-8"?>
<tabMuster><Modele fldID="162" lang="1" Flags="00000000000000000000" Def="0">
    <Des>Vorzugsaktien</Des>
    <Muster><N Des="ein Anzahl" /> <T Des="ein Text" />aktien zu CHF  (Vorzugsaktien) und <N Des="ein Anzahl" /> <T Des="ein Text" />aktien zu CHF </Muster>
    <Text>^ ^aktien zu CHF ^ (Vorzugsaktien) und ^ ^aktien zu CHF ^</Text>
  </Modele>
</tabMuster>

Vous pouvez voir dans l'élément Muster une balise N et T se suive mais il y a un espace qui est la et j'aimerais le conserver...

et le XSLT:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
  <xsl:template match="/">
  <xsl:apply-templates/>
 </xsl:template>
 <xsl:template match="*">
  <xsl:element name="{local-name()}">
   <xsl:apply-templates select="@*|node()"/>
  </xsl:element>
 </xsl:template>
 <xsl:template match="@*">
  <xsl:attribute name="{local-name()}"><xsl:value-of select="."/></xsl:attribute>
 </xsl:template>
<xsl:template match="B|N|D|T">
 <xsl:variable name="name" select="name()"/>
 <xsl:if test="preceding-sibling::node()[1][name() = 'B' or name() = 'N' or name() = 'D' or name() = 'T']">
  <xsl:text> </xsl:text>
 </xsl:if>
 <xsl:element name="b" namespace="http://www.w3.org/1999/xhtml">
  <xsl:attribute name="title">
   <xsl:value-of select="@Des"/>
  </xsl:attribute><xsl:attribute name="style"/>
  <xsl:attribute name="id">
   <xsl:value-of select="name()"/>
  </xsl:attribute>
  <xsl:text>^</xsl:text>
 </xsl:element>
</xsl:template>
</xsl:stylesheet>

Merci pour votre aide

Thierry
Afficher la suite 

6 réponses

Répondre au sujet
virgul 76 Messages postés mercredi 12 janvier 2005Date d'inscription 21 février 2008 Dernière intervention - 2 août 2006 à 08:40
+3
Utile
Ok merci pour votre aide vous m'avez mis sur la piste!

Le &amp;nbsp; n'est pas accepté dans mon programme alors c'est impossible de le mettre!

<xsl:text value=" " /> me renvoit une erreur.

Partant du principe de coq, je me suis demandé qu'es-ce qu'il y a d'autre comme espace. Et j'ai pensé aux espaces insécable de word.

J'ai alors enregistrer mon fichier word au format xml (2003) puis je l'ai ouvert et je l'ai copié dans mon xslt et la magie ca a marché!

Désolé mais je ne me suis pas amusé à cherché comment l'écrire avec le code (alt+....). Pour le faire dans Word crtl+maj+espace!

Merci à vous deux.

++

Thierry
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de virgul
sebmafate 4947 Messages postés lundi 17 février 2003Date d'inscription 14 février 2014 Dernière intervention - 20 juil. 2006 à 16:11
0
Utile
fait ceci :

<xsl:template match="B|N|D|T" xml:space="preserve">

Sébastien FERRAND (
blog)
Consultant Indépendant
[Microsoft MVP Visual C#]
Commenter la réponse de sebmafate
virgul 76 Messages postés mercredi 12 janvier 2005Date d'inscription 21 février 2008 Dernière intervention - 27 juil. 2006 à 11:55
0
Utile
Bonjour,

Merci pour la réponse et désolé pour le retard de la mienne (le mail de notification est resté derrière l'Anti-Spam).

si je rajoute xml:space="preserve" en attributdans mon template comme vous le préconisez, ca me fait des espace partout sauf à la bonne place.

Auriez-vous une autre idée?

Merci beaucoup

Thierry
Commenter la réponse de virgul
cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention - 27 juil. 2006 à 17:22
0
Utile
Salut,

Je me demande tout simplement si c'est possible vu que cet espace là n'a en théorie rien de significatif.
Si tu as la maitrise de l'écriture du fichier essaie d'y placer un espace insécable ("&nbsp;" / alt+0160)

/*
coq
MVP Visual C#
CoqBlog
*/
Commenter la réponse de cs_coq
sebmafate 4947 Messages postés lundi 17 février 2003Date d'inscription 14 février 2014 Dernière intervention - 27 juil. 2006 à 21:45
0
Utile
oui... ou <xsl:text value=" " />

Sébastien FERRAND (
blog)
Consultant Indépendant
[Microsoft MVP Visual C#]
Commenter la réponse de sebmafate
cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention - 4 août 2006 à 22:01
0
Utile
Alt+0160 consiste à appuyer sur alt et taper la série 0160 au pavé numérique sans relacher alt.

/*
coq
MVP Visual C#
CoqBlog
*/
Commenter la réponse de cs_coq

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.