私は、Javaアプリケーションを使用してさまざまなXML文書を解析する最善の方法を探しています。私は現在、SAXとカスタムコンテンツハンドラでこれをやっています。それは素晴らしい - zippyで安定しています。Javaを使用してさまざまなXML文書を処理する方法を教えてください。
私は、同じプログラムを持っていて、現在単一のフォーマットのXMLドキュメントを受け取っていて、さまざまなXML要素の変更を加えて2つの追加のXMLドキュメントフォーマットを受け取るオプションを調べることに決めました。私は、ドキュメント内の最初の "startElement"に基づいてContentHandlerを適切なものに置き換えたいと考えていましたが、ContentHandlerが設定されていて、があり、ドキュメントが解析されました!
... 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();
}
...
私は最初にできると思った方法でこれを行うことはできません。
これは完全に間違っていますか?同じXML処理コードを持つ複数の個別のXML文書を解析する最善の方法は何ですか? I tried to ask in a more general post earlier... but, I think I was being too vague。これらのXML文書はかなり大きく、システムは数分おきに約1200を受け取るため、速度と効率の観点から、私はDOMを見たことはありません。それはちょうど片道の情報の送信です
この質問を長すぎると私の混乱に追加するには。以下は、私が単一のSAX、StAX、またはを持っていたいと思ういくつかの様々なXML文書のモックアップです。パーサーはきれいに対処する。
の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>
managers.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>
については、以下のリファレンスを参照してください。また、DTDベースのソリューションが無効であるように彼は解析を開始するまで、彼は個々のxmlのフォーマットを知らない! –
私は、DTDは大きなノーであることに同意しますが、JAXBはStax XMLStreamReaderを指定するとサブツリーをバインドすることもできます。さらに、Java POJOはメモリ内ではるかに軽く、一般に生のXML(またはDOMはXMLの3倍から5倍のDOM! POJOに注釈を付けてJAXBを使用することはかなり合理的です – StaxMan