J'ai une tâche simple:Comment préserver les commentaires et la déclaration XML lors de l'analyse de fichiers XML à l'aide de SAX?
Je voudrais lire un fichier XML et le renvoyer le plus complètement possible. Avec le code suivant, il y a deux problèmes qui subsistent:
- commentaires sont supprimés
- Je n'ai pas accès au XML Déclaration
code Java:
package com.stackoverflow.tests;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class XmlParsing {
public static void main(String[] args) {
StringBuffer b = new StringBuffer();
try {
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();
DefaultHandler handler = new DefaultHandler() {
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes)
throws SAXException {
b.append("<" + qName + attributesToString(attributes) + ">");
} // END: startElement()
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
b.append("</" + qName + ">");
} // END: endElement
@Override
public void characters(char ch[], int start, int length)
throws SAXException {
b.append(new String(ch, start, length));
} // END: characters()
}; // END: DefaultHandler
saxParser.parse("./src/main/ressources/XmlTest/validWithAttributesCommentsInlineElements.xml", handler);
System.out.println(b.toString());
} catch (Exception e) {
e.printStackTrace();
} // END: try
} // END: main
public static String attributesToString(Attributes a) {
StringBuffer sb = new StringBuffer();
for(int i = 0; i < a.getLength(); i++) {
sb
.append(" ")
.append(a.getQName(i))
.append("=\"")
.append(a.getValue(i))
.append("\"");
}
return sb.toString();
}
} // END: Class XmlParsing
Je parse la Suivant le fichier XML ...:
<?xml version="1.0" encoding="UTF-8"?>
<A attr="1" aaa="2">
<F>general</F>
<B test="3">
<C>element 1</C>
<C>element 2</C>
<C>element 3</C>
</B>
<D>general</D>
<E>general</E>
<inline-element/>
<inline-element with="attributes"/>
<!-- Comment -->
<inline-element />
<inline-element with="attributes" />
</A>
et obtenez:
<A attr="1" aaa="2">
<F>general</F>
<B test="3">
<C>element 1</C>
<C>element 2</C>
<C>element 3</C>
</B>
<D>general</D>
<E>general</E>
<inline-element></inline-element>
<inline-element with="attributes"></inline-element>
<inline-element></inline-element>
<inline-element with="attributes"></inline-element>
</A>
Il est bien pour moi qu'un <elem />
devient <elem></elem>
, mais je voudrais vraiment avoir accès à XML-déclaration et les commentaires.
Comment puis-je utiliser le gestionnaire avant de l'implémenter? Je ne le mets pas en marche. – Edward
Ordre de code modifié –
Cela a fonctionné. Avez-vous aussi une idée de comment obtenir le Xml version = "1.0" encoding = "UTF-8"?> '? – Edward