2017-08-30 1 views
0

Je développe un programme Java qui lit le code HTML, analyse le code HTML, récupère le contenu (texte lisible par l'homme) et le stocke dans un fichier XML. Parfois, le code HTML contient ', " caractères (entre autres), mais parfois ils sont également écrits comme ' et " respectivement.API XML Java convertit " en & quot;

Je compile le code XML en suivant la procédure appropriée. J'utilise les classes Document et Element, et je fais le fichier XML en utilisant les classes Transformer, DomSource et StreamResult.

Le problème est que lorsque le fichier est enregistré, je vois que le symbole & est remplacé par un &. Je sais que c'est la bonne chose. Mais il convertit également ' en &&apos!

J'ai également essayé de convertir l'objet Document en objet String, puis de passer cette chaîne à la méthode StringEscapeUtils.unescapeXml(String s), pour laisser les entités XML intactes. Toutefois, il ne convertit pas l'entité & en &, ce qui entraîne un fichier XML non valide.

(j'ai mis le OutputKeys.ENCODING à "UTF-8" et le OutputKeys.METHOD à "xml".)

+1

Je suppose que vous êtes en train d'écrire une chaîne contenant les six caractères '& a p o s;' dans un noeud de texte dans un document DOM, de sorte que le noeud texte soit sérialisé en tant que '& a m p; un p o s; Le noeud de texte doit contenir du texte non échappé (c'est-à-dire, un seul caractère '' ') et le sérialiseur décidera s'il faut l'échapper ou non. –

Répondre

1

Le problème est avec votre analyse syntaxique HTML, pas avec votre sortie XML. En HTML & apos; est une citation unique, donc quand il y a & apos; dans le code HTML, votre analyseur devrait vous le donner comme un seul devis.

Quel analyseur utilisez-vous? Les analyseurs populaires tels que Jsoup ne font pas cette erreur.

+0

Ce n'est pas le problème. Cela ne me dérange pas si j'ai '' ' 'ou' '' '. Je pense que le problème est lorsque l'analyseur XML voit le symbole '&' sans remarquer qu'il est suivi par un 'apos;' ou 'quot;' etc, donc en le convertissant en '&', ayant ainsi '' & ''. Cependant, si le texte était "George & Nick", bien sûr le '&' devrait être converti en '&'. – George

+1

Oui c'est le problème, pas le sérialiseur XML ne fait pas cette erreur. Je ne sais pas pourquoi vous pensez que, malgré le fait que cela soit indiqué autrement, mais c'est une pensée incorrecte. – kumesana