Nous utilisons SAX pour analyser XML car il ne nécessite pas que le document XML entier soit lu en mémoire afin d'analyser une seule valeur. J'ai lu beaucoup d'articles qui insistaient sur le fait que SAX ne peut être utilisé que pour analyser/décoder le XML et ne pas le créer. Est-ce vrai?Comment encoder des données arbitraires en XML en utilisant Java 1.4 et SAX?
2
A
Répondre
4
Non, ce n'est pas vrai, vous pouvez encoder XML à tout Writer en Java en utilisant quelque chose de similaire à:
char[] ch;
AttributesImpl atts = new AttributesImpl();
Writer writer = new StringWriter();
StreamResult streamResult = new StreamResult(writer);
SAXTransformerFactory tf = (SAXTransformerFactory) TransformerFactory.newInstance();
// SAX2.0 ContentHandler
TransformerHandler transformerHandler = tf.newTransformerHandler();
Transformer serializer = transformerHandler.getTransformer();
serializer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
// serializer.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM, "nodes.dtd");
serializer.setOutputProperty(OutputKeys.INDENT, "yes");
transformerHandler.setResult(streamResult);
transformerHandler.startDocument();
atts.clear();
// atts.addAttribute("", "", "xmlns", "CDATA", "http://www.example.com/nodes");
// atts.addAttribute("", "", "xmlns:xsi", "CDATA", "http://www.w3.org/2001/XMLSchema-instance");
// atts.addAttribute("", "", "xsi:schemaLocation", "CDATA", "/nodes.xsd");
transformerHandler.startElement("", "", "node_list", atts);
// displayName element
if (displayName != null) {
transformerHandler.startElement("", "", "display_name", null);
ch = displayName.toCharArray();
transformerHandler.characters(ch, 0, ch.length);
transformerHandler.endElement("", "", "display_name");
}
// nodes element
transformerHandler.startElement("", "", "nodes", null);
atts.clear();
atts.addAttribute("", "", "node_type", "CDATA", "sometype");
transformerHandler.startElement("", "", "node", atts);
ch = node.getValue().toCharArray();
transformerHandler.startElement("", "", "value", null);
transformerHandler.characters(ch, 0, ch.length);
transformerHandler.endElement("", "", "value");
transformerHandler.endElement("", "", "node");
transformerHandler.endElement("", "", "nodes");
transformerHandler.endElement("", "", "node_list");
transformerHandler.endDocument();
String xml = writer.toString();
0
Les interfaces gestionnaire SAX ont été conçus pour être faciles à appliquer. Il est facile d'écrire une classe similaire (peut-être en enveloppant une interface SAX) pour faciliter l'appel - chaînage, rappel de l'élément à fermer, attributs plus faciles, etc.
Questions connexes
- 1. Comment valider XML en utilisant SAX?
- 2. Comment ajouter un élément XML en Java 1.4
- 3. XML en utilisant Java
- 4. Analyseur syntaxique SAX en Java
- 5. Comment encoder une vidéo en utilisant PHP?
- 6. Convertir xml en xsd en utilisant java
- 7. Comment analyser avec SAX en utilisant Attributs & Valeurs à un chemin d'URL en utilisant iPhone SDK?
- 8. Services Web utilisant J2ME et Java Version 1.4
- 9. Comment envoyer des données à COM PORT en utilisant JAVA?
- 10. URLEncoder encoder/URLDecoder décoder en Java (Android)
- 11. Sérialisation d'objets Java en xml et en arrière (configuration XML)
- 12. Comment convertir des données binaires en chaînes et revenir en Java?
- 13. Traitement XML en Java
- 14. En utilisant VB.net extraire des données XML à partir
- 15. Comment encoder des médias en base64 donné URL en Ruby
- 16. l'analyse d'un fichier XML en Java
- 17. Java: arrondi à des valeurs arbitraires
- 18. Encoder les valeurs des colonnes xml en tant que xml dans le serveur SQL
- 19. Gestion des données empaquetées en utilisant C#
- 20. Comment supprimer des nœuds XML en double en utilisant XSLT
- 21. Java - Codage d'image en XML
- 22. Comment décompresser des données en utilisant z lib en symbian
- 23. Comment publier des données JSON sur un serveur en utilisant Java
- 24. Comment publier un fichier XML ou des données dans une URL en utilisant httpWebRequest et httpWebResponse?
- 25. Comment publier des données en utilisant jQuery et MVC
- 26. Accès aux variables système Windows en Java 1.4
- 27. Définir l'en-tête SOAP personnalisé en utilisant Axis 1.4
- 28. Visualisation des données en Java
- 29. Comment lancer une liste en utilisant des génériques en Java?
- 30. Comment puis-je extraire des données XML d'une URL en utilisant XML :: Twig?
Est-ce que cela compile tout le document en mémoire? d'utiliser le processeur XSLT? –
Je sais que c'est un vieux sujet, mais ce code ne fonctionne pas complètement. Quelqu'un pourrait venir à cette solution à l'avenir et essayer d'exécuter le code ci-dessus. –