2010-08-10 9 views
3

J'ai besoin de coder un document XML dans un format qui passera par un analyseur XML sous la forme d'une chaîne (c'est-à-dire des étiquettes de bande). Je dois ensuite le décoder à nouveau et j'ai besoin de le faire sur Android. Quelle est la bibliothèque/classe de l'API Android que je recherche?Comment encoder XML sur Android?

Merci

+0

Il ressemble à ce que vous êtes réellement chercher à faire est _escape_ XML; Autrement dit, remplacez tous les caractères spéciaux XML par leurs entités XML respectives. Est-ce correct? –

+0

oui, c'est exact. Im en utilisant URLEncoder de java.net pour le moment (après avoir écrit cette question). Y a-t-il un problème avec ça? – MalcomTucker

Répondre

2

Je fini par utiliser URLEncoder/URLDecoder, qui semble fonctionner très bien.

String encoded = URLEncoder.encode(xml); 
0

Le Java XML Parser général est le chemin à parcourir.

et si vous devez le construire manuellement, vous pouvez utiliser le XmlSerializer

modifier:

Here est un article sur le travail avec xml sur android, mais il utilise pour l'écriture XmlSerializer aussi

+0

Désolé, peut-être que je n'étais pas clair, j'ai déjà un analyseur, je suis à la recherche de l'encodeur. Je veux juste transformer '<' en < et ainsi de suite ... – MalcomTucker

+0

désolé, j'ai mal compris. –

4

XmlSerializer est probablement ce que vous voulez. Utilisez-le pour créer le document XML "externe"; vous pouvez donner à son text(...) method une chaîne XML intacte et il fera l'échappement pour vous. Vous pouvez faire le même genre de chose avec l'API DOM en utilisant setTextContent si vous voulez vraiment construire une arborescence DOM puis la sauvegarder en XML. Comme vous semblez le savoir, n'importe quel analyseur XML décodera correctement les références d'entité lorsque vous demanderez le retour du texte.

Si vous voulez vraiment écrire votre propre code de construction XML, vous pouvez essayer d'insérer la bibliothèque Apache commons-lang dans votre projet pour qu'elle soit StringEscapeUtils class. Je ne suis pas au courant de quoi que ce soit qui fera juste la substitution d'entité sans construire de vrai XML dans l'API Android de base.

Pour un exemple, essayez ceci:

XmlSerializer xs = Xml.newSerializer(); 
StringWriter sw = new StringWriter(); 
xs.setOutput(sw); 
xs.startDocument(null, null); 
xs.startTag(null, "foo"); 
xs.text("<bar>this is some complete XML document you had around before</bar>"); 
xs.endTag(null, "foo"); 
xs.endDocument(); 
Log.v("XMLTest", "Generated XML = " + sw.toString()); 
+0

C'est exactement ce dont j'avais besoin, et c'est, à mon avis, la bonne réponse à cette question. – tdn120

0

cette question est l'un des premiers résultats, quand je la cherchai solution à ce problème, donc je réponds ici

Html.fromHtml (String)