7

XMLを解析する必要がある場合、以下の2つのスニペットの違いは何ですか?

1.SAXParserメソッドを使用parseする:

SAXParserFactory sfactory = SAXParserFactory.newInstance();
SAXParser parser = sfactory.newSAXParser();
parser.parse(new File(filename), new DocHandler());

parseSAXParserから取得したXMLReaderのメソッドを使用するようになりました

SAXParserFactory sfactory = SAXParserFactory.newInstance();
SAXParser parser = sfactory.newSAXParser();
XMLReader xmlparser = parser.getXMLReader();
xmlparser.setContentHandler(new DocHandler());
xmlparser.parse(new InputSource("test1.xml"));   

柔軟性が増しましたが、他に違いはありますか?

4

3 に答える 3

9

内部 instanceof に委任するだけのparseメソッドは、通常、より便利です。より高度なユースケースでは、 を使用する必要があります。いくつかの例はSAXParserXMLReaderXMLReader

  • 実装の非標準機能の設定
  • ContentHandlerEntityResolverまたはとして異なるクラスを設定するErrorHandler
  • 解析中のハンドラーの切り替え
于 2012-12-14T13:46:20.520 に答える
3

お気づきのとおり、XMLReaderはorg.xml.sax(http://www.saxproject.org/から取得)に属し、SAXParserはjavax.xml.parsersに属しています。SAXParserは内部でXMLReaderを使用します。XMLReaderを直接操作できます

XMLReader xr = XMLReaderFactory.createXMLReader();
xr.setContentHandler(handler);
xr.setDTDHandler(handler);
...

ただし、SAXParserの方が使いやすいことに気付くでしょう。つまり、便宜上SAXParserが追加されました。

于 2012-12-14T13:36:50.693 に答える
0

http://docs.oracle.com/javase/1.5.0/docs/api/org/xml/sax/XMLReader.html . XML リーダーのリンクを見て、sax パーサーの次のリンクを見てください。http://docs.oracle.com/javase/1.5.0/docs/api/javax/xml/parsers/SAXParser.html

異なるパーサーを使用するかどうかは、パーサーに何をさせたいかによって異なります。xml のコンテンツを変更、削除する場合は、W3C Dom パーサーを使用できます。要素を解析して取得するだけの場合は、SAX パーサーを使用できます。そこにはいくつかあります。したがって、それは本当にあなたが望むものに依存します。

于 2012-12-14T12:51:46.550 に答える