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

virgul
Messages postés
76
Date d'inscription
mercredi 12 janvier 2005
Dernière intervention
21 février 2008
- 20 juil. 2006 à 15:30 - Dernière réponse : cs_coq
Messages postés
6366
Date d'inscription
samedi 1 juin 2002
Dernière intervention
2 août 2014
- 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 

Votre réponse

6 réponses

Meilleure réponse
virgul
Messages postés
76
Date d'inscription
mercredi 12 janvier 2005
Dernière intervention
21 février 2008
- 2 août 2006 à 08:40
3
Merci
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

Merci virgul 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 95 internautes ce mois-ci

Commenter la réponse de virgul
sebmafate
Messages postés
4947
Date d'inscription
lundi 17 février 2003
Dernière intervention
14 février 2014
- 20 juil. 2006 à 16:11
0
Merci
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
Messages postés
76
Date d'inscription
mercredi 12 janvier 2005
Dernière intervention
21 février 2008
- 27 juil. 2006 à 11:55
0
Merci
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
Messages postés
6366
Date d'inscription
samedi 1 juin 2002
Dernière intervention
2 août 2014
- 27 juil. 2006 à 17:22
0
Merci
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
Messages postés
4947
Date d'inscription
lundi 17 février 2003
Dernière intervention
14 février 2014
- 27 juil. 2006 à 21:45
0
Merci
oui... ou <xsl:text value=" " />

Sébastien FERRAND (
blog)
Consultant Indépendant
[Microsoft MVP Visual C#]
Commenter la réponse de sebmafate
cs_coq
Messages postés
6366
Date d'inscription
samedi 1 juin 2002
Dernière intervention
2 août 2014
- 4 août 2006 à 22:01
0
Merci
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.