0

昨日、JAXP API の SAX2 API クラス XMLReaderFactory と SAXParserFactory に関するドキュメントを読みました。どちらも、XMLReader クラスのインスタンスを提供するという同じ目的を果たしていました。次に、さまざまな資料を調べて、2 つの違いと、特定のシナリオでどちらがより役立つかを理解しました。

上記の質問に関して私が読んだ資料のほとんどは、以下の違いを述べています。

ヘルパー クラス XMLReaderFactory メソッド createXMLReaderFactory(String className) の問題は、ファクトリが引数として、使用するパーサー クラスの文字列名を必要とすることです (その Apache クラス、org.apache.xerces.parsers.SAXParser)。別のパーサー クラスを String として渡すことで、パーサーを変更できます。このアプローチでは、パーサー名を変更した場合、インポート ステートメントを変更する必要はありませんが、クラスを再コンパイルする必要があります。これは明らかに最善の解決策ではありません。クラスを再コンパイルせずにパーサーを変更できる方がはるかに簡単です。

JAXP は、より優れた代替手段を提供します。パーサーを Java システム プロパティとして提供できます。もちろん、Sun からディストリビューションをダウンロードすると、Sun のバージョンの Xerces を使用する JAXP 実装が得られます。パーサーを変更する (たとえば、Oracle のパーサーに変更する) には、あるパーサーの実装から別のパーサーの実装に移動して、クラスパス設定を変更する必要がありますが、コードの再コンパイルは必要ありません。そして、これが JAXP のすべてである魔法 (抽象化) です。特定のメソッドのどの特定のシナリオでの使用がより便利になるか、誰にも教えてもらえますか

しかし、メソッド createXMLReaderFactory(String className) を使用していて、クラス名を method に直接渡す代わりに、プロパティ ファイルからクラスの名前を読み取ってに渡す場合、上記の違いには同意しません。クラスを再コンパイルする必要はありません。

上記の点で正しいかどうか教えてください。

SAX2 API クラス XMLReaderFactory と JAXP API の SAXParserFactory の違いを誰か教えてもらえますか?

4

1 に答える 1

0

JAXPSAXParserFactoryとは、SAXAPIとSAXParserの便利なファサードにすぎないと思います。実際の解析に内部的に使用します。SAXParserなしでXMLを解析できますが、XMLReaderFactoryXMLReaderSAXParserXMLReaderXMLReader.parse(InputSource)SAXParser.parse(InputSource, DefaultHandler).

于 2013-01-03T07:48:56.360 に答える