Suite à mon problème d'espace manquant dans mon XML, j'aurais besoin de remplacer les espaces par des entités nbsp. Comment puis-je inserer des entités dans mon arbre DOM ?
Suite à mon problème d'espace manquant dans mon XML, j'aurais besoin de remplacer les espaces par des entités nbsp. Comment puis-je inserer des entités dans mon arbre DOM ?
peux-tu nous rappeller quelle était la difficulté abordée dans ton précédent message?
les espaces sont repérés comment etc ...
Dans un programme Java, je lis une chaine de caractere contenant un nombre variable d'espaces en debut et fin. Je créé un TextNode avec cette chaine. Mais voila, la chaine est "trimée", c'est à dire que les espaces en debut et fin de chaine sont supprimés dans le XML. Après avoir tenté une approche avec un CDATA (qui permet effectivement de conserver les espaces. Malheureusement, ils sont trimés ensuite par le XSL transformant le fichier XML en HTML), j'ai tenté de remplacer les espaces par des entités #160 permettant d'afficher un espace. Dans une section CDATA, le HTML final affiche effectivement la chaine correspondante au code de l'entité. Dans un TextNode, le & est remplacé par la chaine correpondante au code de l'entité, c'est à dire &. Je cherche donc à inserer des entités dans mon arbre DOM avec createEntityReference, mais cette methode n'accepte que les chaines sans caracteres speciaux comme parametres (pas de #), ce qui ne me sert à rien, puisque mon document XML ne fait pas reference à une DTD, c'est à dire que je ne peux pas utiliser d'entité que j'aurais definie. En fait j'ai essayé tout un tas de solutions qui marchent toutes PRESQUE. A chaque fois, il ne manque qu'une petite bricole. C'est rageant. Si quelqu'un avait la solution miracle, ça m'arrangerait enormement...
est-ce que tu ne peux pas faire un test du genre(la syntaxe n'est évidemment pas exacte):
après, tu n'as plus de problème dans ta xsl?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 nodeVal=node.value; if(nodeVal.indexOf(" ")!=(-1)) nodeVal.replace(" ";"*");
je ne comprend pas pourquoi ton remplacement par * ne fonctionne pas?
Le problème, c'est que quand je fais le setNodeValue, DOM interprete le contenu de la chaine de remplacement: Je lui met   et il met  
Et là, ça ne marche plus du tout, evidemment.
ok!
Il y a peut-être un moyen de t'en sortir simplement, par contre, ce n'est peut-être pas très "orthodoxe":
dans un premier temps, tu remplaces tout les blancs par des "$$#160;"
Tu fais tout ce que tu as à faire dans ton arbre.
Une fois la transformation xslt effectuée, tu récupères le flux de sortie, et tu remplaces tous les "$$" par "&" .
cependant, je ne sais pas si ça peut te convenir, ne sachant pas si la transformation xslt se fait au niveau de ton programme java.
C'est une bonne idée, mais ça n'est pas faisable, en l'occurence. Il me faut une solution fiable
En fait, la solution la plus proche de que je voulais, c'etait d'ajouter des fils EntityReference à mon arbre DOM, mais la methode createEntityRefernce n'accepte pas de caractere #, je ne peux donc pas mettre de #160. Quant à  , ça n'est pas une entité predefinie en XML, il faudrait donc une DTD. Or il n'y a pas de DTD.
tu mets #160 ou   ?
dans ton texte, tu parles de #160 et de -> d'où ma question.
La syntaxe exacte est  
(& et ; étant interprété comme séparateur).
  evidemment, sinon, ça n'est pas une entité. Mais quand tu utilises la methode createEntityReference de Document, il faut lui passer en parametre uniquement le contenu de l'entité, soit #160 en l'occurence. Il est sensé ajouter lui meme le & et le ;. Le probleme est que le # ne passe pas.
Bonjour,
Je rencontre le même problème... Voici un début de solution:
http://www.developpez.net/forums/sho...d.php?t=549122
Enfin, si ce sujet est toujours d'actualité chez toi.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager