2012-05-14 21 views
7

どちらも同じ目的(XMLReaderを作成する)を持っているようです。 一部のチュートリアルにはこのチュートリアルが含まれています。違いSAXParserFactory XMLReaderFactory。どちらを選択するのですか?

のSAXParserFactory:

0:

サンプルコードをサポート複数の構成であると思われます

// SAXParserFactory 
SAXParserFactory factory = SAXParserFactory.newInstance(); 
SAXParser parser = factory.newSAXParser(); 
XMLReader reader = parser.getXMLReader(); 
reader.parse(new InputSource("document.xml")); 

XMLReaderFactoryは:

例コードが付属して二行以下

  • // XMLReaderFactory 
    XMLReader xmlReader = XMLReaderFactory.createXMLReader(); 
    xmlReader.parse(new InputSource("document.xml")); 
    

    質問:

    これらは、主な違いはありますか私が監督してきたいくつかがあります。

    どちらを選択しますか?

  • +0

    SAXParserFactoryはJAXPですが、XMLReaderFactoryは「公式」SAX APIです。 O'Reillyの古いSAX2の本は、名前空間を処理する方法のために公式のAPIを推奨していることを覚えています。これがもはや関係があるかどうかはわかりません。しかし、何らかの理由でJAXPが必要な場合を除き、XMLReaderFactoryを使用すると思います。たぶん誰か他の人が現在の入力をもっと提供するかもしれない。 –

    答えて

    4

    メインJAXP APIsは、javax.xml.parsersパッケージに定義されています。このパッケージにはSAXParserFactoryのようなベンダー中立の工場クラスが含まれており、S AXParserとなります。

    SAXParserFactoryは、アプリケーションがXML文書を解析するためにSAXベースのパーサーを構成して取得できるようにするファクトリAPIを定義しています。

    • SAXParserはXMLReaderの 実装クラスをラップするAPIを定義します。

    • パッケージorg.xml.saxは、基本的なSAX APIを定義します。

    • Javaランタイムは、...あなたからのデフォルトの実装XMLReader

    SAXParserFactoryがいる(SAX1)の詳細を隠すParserFactory /(SAX2)XMLReaderFactoryは付属しています。

    あなたは異なるJAXPパーサ(デフォルトの実装で知らincomapatibilty /バグがあるかもしれません)あなたは中立SAXParserFactoryベンダーを使用する必要があります実装することで、デフォルトJAXPパーサを置き換えることができるようにしたい場合。

    あなたのアプリケーションで常にSAX2XMLReaderを使用することがわかっている場合はXMLReaderFactoryを使用することができます。 JavaでXML処理についての本を書いてい

    2

    はElliotte Rusty Haroldが、一度書いた:

    SAXParserFactory [is] a hideous, evil monstrosity of a class that should 
    be hung, shot, beheaded, drawn and quartered, burned at the stake, 
    buried in unconsecrated ground, dug up, cremated, and the ashes tossed 
    in the Tiber while the complete cast of Wicked sings "Ding dong, the 
    witch is dead." --Elliotte Rusty Harold on xml-dev 
    

    私は実際にそこまで行かないだろう(と私がやった場合、私は試してみて、それが文法的になるだろう)。 JAXPのように、デザインの中で最も素晴らしいものではありません。 JAXPの他の部分と一貫しているため、パーサインスタンスを取得するデフォルトの方法として使用します。

    歴史的に、2つは並行して開発されました。 JAXPはもともとSAX1に欠けている機能を追加しようとしましたが、並行して、SAX2はいくつかのギャップを埋めるようになっていました。

    関連する問題