私が抱えている問題は、SAX defaultHandler クラスの拡張機能を使用して 1 つの XML ドキュメントを解析したいということです。ハンドラーを 1 つだけ使用すると、XML を解析して、オブジェクトのプロパティにさまざまなタグを割り当てることができます (ドメインとエリアを参照)。これらをドメインとエリア オブジェクトに追加したら、ドメインとエリアのリストを持つ別のオブジェクト (GroupedFiles) に追加します。私が抱えている問題は、2 つのハンドラーを使用して 1 つのドキュメントを解析することです。私の理論は、最良のコーディング プラクティスではありませんが、ドキュメントを 2 回解析し、ドメイン ハンドラーを使用して 1 回実行し、ドメインを設定してから、グループ化されたファイルに追加し、次にエリアに対して同じことを行うというものです。ここにコードがあります、
GroupedFiles groupedFiles = new GroupedFiles();
ArrayList<Domain> domains = new ArrayList<Domain>();
ArrayList<Area> areas = new ArrayList<Area>();
//Create parser from factory
XMLReader parser = XMLReaderFactory.createXMLReader();
//Creates an input stream from the file "someFile.xml"
InputStream in = new FileInputStream(new File("someFile.xml"));
InputSource source = new InputSource(in);
//Create handler instances
DomainHandler domainHandler = new DomainHandler();
AreaHandler areaHandler = new AreaHandler();
//Parses out XML from a document using each handler,
//adding it to an object with the correct properties then adds those
//to another object which features Lists of Domains, Areas, and Directories.
parser.setContentHandler(domainHandler);
parser.parse(source);
domains = domainHandler.getXML();
groupedFiles.setDomain(domains);
parser.setContentHandler(areaHandler);
parser.parse(source);
areas = areaHandler.getXML();
groupedFiles.setArea(areas);
しかし、私にはできず、2 番目にハングアップしたようparser.parse(source)
です。ドメインを実行した後に groupedFiles を見ると、データが取り込まれていますが、領域は取り込まれていません。何かアドバイス?