2010-12-15 64 views
4

J'ai une application Android qui utilise les analyseurs syntaxiques SAX pour extraire des données à partir d'un fichier XML. Certaines données sont présentes dans certaines balises CDATA et contiennent parfois des caractères de nouvelle ligne. Ces caractères de nouvelle ligne sont supprimés pendant l'analyse. Comment puis-je les préserver? Par ailleurs, je pensais avoir trouvé une réponse here, mais en plaçant "& #xA;" à l'intérieur d'une balise CDATA n'aboutira qu'à l'obtention d'un "& #xA;" quand je l'analyse.Android SAX Parsing: Comment conserver Newlines à partir d'un tag CDATA

Quelqu'un a-t-il des suggestions?

Merci.

+0

vous pouvez voir ce sujet: http://stackoverflow.com/questions/3401111/preserve-newlines-when-parsing-xml/14071260#14071260 –

Répondre

2

Les retours à la ligne ne sont pas supprimés par l'analyseur, qu'ils soient des caractères normaux ou dans la section CDATA. Mais dans les deux cas, divers sauts de ligne (Unix, Windows, Mac) sont normalisés en un seul caractère canonique ("unix", \ n). Il n'y a aucun moyen d'empêcher cette normalisation de se produire, sauf en utilisant l'entité de caractère comme suggéré; et ceci ne peut pas être fait dans la section CDATA parce que la gestion d'entité est désactivée là.

Mais pourquoi voulez-vous empêcher cette normalisation? Si vous voulez cela pour l'affichage, vous pouvez juste remplacer \ n avec n'importe quel saut de ligne local que vous voulez (\ r pour mac, ou \ r \ n séquence pour windows).

+0

Merci, StaxMan. Cependant, les caractères "\ n" sont, en effet, supprimés lors de l'analyse. Je sais qu'ils ne sont pas censés être retirés, mais ils le sont. C'est le problème. Y at-il une sorte de propriété qui doit être définie pour empêcher cela? – mahdaeng

+0

Quels analyseurs SAX Android utilise-t-il? Si cela se produit vraiment, cela ressemble à un bug à signaler. Je ne suis au courant d'aucune propriété pour les supprimer sur un parseur que j'ai utilisé (Xerces, Woodstox), et il serait étrange d'avoir un tel paramètre activé. Mais êtes-vous sûr qu'ils ont été supprimés ou imprimez-vous simplement du texte sur la console? Peut-être que la console n'affiche pas les sauts de ligne? Ou si l'inclure sur la page Web, HTML rassemble tout l'espace blanc. Je demande depuis que j'ai eu des cas où cela a été le problème. – StaxMan

+0

Merci, StaxMan. Je ne suis pas sûr quel parser SAX est utilisé. Et vous avez peut-être raison - ce pourrait être un bug qui devrait être signalé. J'ai décidé d'aborder ce problème d'une manière différente. Je n'utiliserai pas de balises CDATA et remplacerai simplement tous les caractères potentiellement problématiques par leur équivalent de balisage (par exemple, remplacez «<» par «<»). Cela éliminera mon besoin pour les tags CDATA et me permettra d'utiliser la solution " " pour les nouvelles lignes. Merci pour vos suggestions. – mahdaeng