Lignes vides lors d'une transformation XSLT

Lignes vides lors d'une transformation XSLT - XML/XSL - Programmation

Marsh Posté le 31-05-2005 à 16:08:08    

Salut,
 
j'ai un petit problème lorsque je réalise une transofmration XSLT sur mes fichiers XML : j'ai un fichier XML (modèle de base de donnée, généré avec DBDesigner4) et un fichier XSLT, qui me converti ce modèle en instruction PostgreSQL.
 
J'utilise Sablotron en ligne de commande (sabcmd xml2postgres.xslt test.xml test.sql), et la transformation marche bien. Le problème, c'est que je me retrouve avec énormément de lignes blanches au début et à la fin du fichier : sur un fichier généré de 6000 lignes, il y en 1500 vides à la fin, et 3600 au début :/ (à peu près)
 
Je pensais à un bug de Sablotron, mais en essayant un autre programme (Xalan, beaucoup plus rapide que Sablotron d'ailleurs), ça fait pareil. L'auteur du fichier XSLT constate la même chose d'ailleurs
 
 
Bref, je débute en XSLT, et j'aimerais comprendre d'où vient le problème ...
Le fichier XSLT en question
Un modèle de DB comme exemple
Le résultat :/
 
 
Merci de votre aide [:romf]

Reply

Marsh Posté le 31-05-2005 à 16:08:08   

Reply

Marsh Posté le 01-06-2005 à 10:31:28    

Si tu regardes ton xml de départ dans un éditeur digne de ce nom, tu verras qu'il y a une balise par ligne avec à chaque fois un retour à la ligne ( CRLF), pratiquement chaque balise à donc un contenu dit mixte... ton XSLT reprend tous ces CRLF en amont et en aval.
 
Tu peux éviter cela en ajoutant un template comme ceci:


<?xml version="1.0" encoding="ISO-8859-1"?>
 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 
<xsl:output encoding="iso-8859-1" method="text" omit-xml-declaration="yes" indent="no"/>  
<xsl:strip-space elements="DBMODEL"/>  
<xsl:param name="target"/>  
 
<xsl:template match="text()"/><!-- /!\ avale tout le contenu mixte /!\ -->
 
<xsl:template match="DBMODEL/METADATA">  
...


 
Y'a une raison de pas utiliser le namespace xsl pcq c'est pas vraiment standard, le plus dur dans ta question c'était de remettre les xsl: devant toutes les balises du stylesheet...
 
 

Reply

Marsh Posté le 01-06-2005 à 15:42:27    

Hum, concrètement, il faut que je fasse quoi ? :D
 
J'ai mis ça dans mon .xslt :
 


<template match="text()"/><!-- /!\ avale tout le contenu mixte /!\ -->
<template match="DBMODEL/METADATA">


au lieu d'avoir juste <template match="DBMODEL/METADATA">, et ça m'enlève déjà des espaces devant (et à la fin aussi).
 
Par contre, j'ai rajouté un <text>-- début du script</text>, juste après <template match="DBMODEL/METADATA"> et en fait, ça affiche plein de lignes vides encore, entre --début du script et le début de la sortie que je veux :/ (un peu comme entre le ALTER TABLE et le "-- End of generated script " de mon fichier d'exemple) ...
 
 
J'ai essayé de virer tout les retours à la ligne du fichier XML, et effectivement, ça m'a enlevé toutes les lignes blanches [:dawa] Mais c'est pas super pratique, j'aurais préféré avoir à éviter de toucher à ce fichier :/
 
Merci de ta réponse en tout cas :jap:

Reply

Sujets relatifs:

Leave a Replay

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