Ich bin auf der Suche nach der besten Methode zum Parsen verschiedener XML-Dokumente mit einer Java-Anwendung. Ich tue dies derzeit mit SAX und einem benutzerdefinierten Content-Handler und es funktioniert großartig - zippy und stabil.
Ich habe beschlossen, die Option zu erkunden, die das gleiche Programm, das derzeit ein einzelnes Format XML-Dokument empfängt, zwei zusätzliche XML-Dokumentformate mit verschiedenen XML-Elementänderungen empfangen. Ich hatte gehofft, einfach den ContentHandler mit einem geeigneten auf der Grundlage der ersten "startElement" im Dokument austauschen... aber, uh-duh, der ContentHandler ist festgelegt und dann das Dokument wird geparst!
... constructor ...
{
SAXParserFactory spf = SAXParserFactory.newInstance();
try {
SAXParser sp = spf.newSAXParser();
parser = sp.getXMLReader();
parser.setErrorHandler(new MyErrorHandler());
} catch (Exception e) {}
... parse StringBuffer ...
try {
parser.setContentHandler(pP);
parser.parse(new InputSource(new StringReader(xml.toString())));
return true;
} catch (IOException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
}
...
Es sieht also nicht so aus, als ob ich das so machen könnte, wie ich es ursprünglich dachte.
Sehe ich die Sache also völlig falsch? Was ist die beste Methode, um mehrere einzelne XML-Dokumente mit demselben XML-Verarbeitungscode zu parsen? Ich habe vorhin versucht, in einem allgemeineren Beitrag zu fragen, aber ich glaube, ich war zu vage. . Aus Geschwindigkeits- und Effizienzgründen habe ich DOM nie wirklich in Betracht gezogen, da diese XML-Dokumente ziemlich groß sind und das System alle paar Minuten etwa 1200 erhält. Es ist nur ein einseitiger Versand von Informationen
Um diese Frage zu lang und fügen Sie zu meiner Verwirrung; folgende ist ein Mockup von einigen verschiedenen XML-Dokumenten, die ich möchte eine einzelne SAX, StAX, oder ??
products.xml:
<products>
<product>
<id>1</id>
<name>Foo</name>
<product>
<id>2</id>
<name>bar</name>
</product>
</products>
stores.xml:
<stores>
<store>
<id>1</id>
<name>S1A</name>
<location>CA</location>
</store>
<store>
<id>2</id>
<name>A1S</name>
<location>NY</location>
</store>
</stores>
manager.xml:
<managers>
<manager>
<id>1</id>
<name>Fen</name>
<store>1</store>
</manager>
<manager>
<id>2</id>
<name>Diz</name>
<store>2</store>
</manager>
</managers>