XSLT et noeuds vides en sortie (C# aussi)

XSLT et noeuds vides en sortie (C# aussi) - XML/XSL - Programmation

Marsh Posté le 20-07-2007 à 17:16:43    

Ca fait un moment que je tourne en rond pour trouver une méthode pour "vider" les noeuds que je produis avec un script XSLT. J'arrive juste à produire des :

Code :
  1. <balise>
  2. </balise>


alors que je souhaiterais que mon fichier en sortie contienne des  

Code :
  1. <balise />


j'ai sans doute un problème de vocabulaire vu que toutes mes recherches sur le sujet ont été infructueuses ... Je n'ai jamais pu tomber sur autre chose que les xsl:strip-space qui ne traitent que les données entrantes et absolument pas les noeuds produits.
 
Quelqu'un aurait-il une solution à ce problème pourtant idiot ? [:petrus75]
 
 
edit : typo
edit2 : précision : mon xslt est interprété au milieu de code C# compilé sous Visual Studio .Net 2003 et est donc potentiellement sujet à des "libertés" prises par l'auteur de la plateforme .Net 1.1


Message édité par theshockwave le 23-07-2007 à 11:03:44
Reply

Marsh Posté le 20-07-2007 à 17:16:43   

Reply

Marsh Posté le 20-07-2007 à 22:43:01    

Ca c'est ce qu'on obtient alors qu'on veut l'éviter , d'habitude...
 
Tu veux donc transformer du XML en XML  
Si tu codes  
 <xsl:template match="balise">
  <xsl:copy>
  </xsl:copy>
 </xsl:template>  
ou même
 <xsl:template match="balise">
  <xsl:copy/>
 </xsl:template>  
 
XmlSpy donne le résultat <balise/>
 
Mais il ne s'agit que de cosmétique ,car les deux expressions sont équivalentes.
 
 

Reply

Marsh Posté le 23-07-2007 à 10:19:45    

en l'occurrence, non, les deux expressions ne sont pas équivalentes quand le XML généré retourne en entrée d'un type C# généré à coup de XSD ... (il considère que le whitespace entre les deux balises ne respecte pas la contrainte de balise vide)
Pour le xsl:copy, oui, il me laisse bien les balises sous leur forme "concise", mais lorsque je génère un élément à coup de xsl:element, je ne parviens pas à le mettre dans ce même état s'il est vide
 
edit :
en clair, lorsque je charge mes données dans mon type généré par un XSD, il me sort des erreurs du type Column 'unNoeudQuelconque_text' does not allow DBNull.Value
 
edit2 : en fait, non, le xsl:copy ne me laisse pas les balises fermées à partir du moment où je dois aussi copier les attributs ... Pour faire ca, je fais simplement ca :

Code :
  1. <xsl:copy>
  2.     <xsl:copy-of select="attribute:*" />
  3. </xsl:copy>


 


Message édité par theshockwave le 23-07-2007 à 11:24:30
Reply

Marsh Posté le 23-07-2007 à 11:53:13    

Je me demande aussi s'il ne serait pas plus simple de faire un traitement sur le XmlDocument que je manipule (côté C#, donc, cette fois) pour vider les noeuds dont le texte ne contiendrait que du whitespace ...
 
Enfin, j'ai pu trouver une "solution" qui est de permettre les valeurs nulles dans le XSD

Reply

Marsh Posté le 23-07-2007 à 18:09:12    

J'ai l'impression de ne pas avoir de succès avec mes questions [:dawa] C'est pas que le problème ne soit pas contourné, c'est juste que ca me sidère de ne pas arriver "facilement" à générer ces balises fermées en xslt

Reply

Marsh Posté le 30-08-2007 à 12:28:57    

je pense que ton souci est ailleurs.
 
c'est pas normal que XmlDocument saute une ligne entre l'ouverture et la fermeture du tag.
 
pour moi y'a une couille dans ta transformation : tu rajoutes un saut de ligne dans ta balise, et XmlDocument le conserve.
 
c'est d'ailleurs ce qui ne plait pas lors de la validation.
 
<toto></toto> == <toto/>
 
mais <toto>\n</toto> != <toto/> ce qui est parfairement normal. ceci s'applique à tout caractères non imprimable.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed