SAX パーサーは、次の要素の開始位置を知るために、すべてのサブツリー (「< abc>< def>< /def>< /abc>」など) をスキャンする必要があります。これは、単一の XML ドキュメントに対して XML パーサーを並列化できない理由でもあります。
あなたの場合、私が考えることができるチューニングの唯一の2つの方法:
1) 解析する XML ドキュメントが多数ある場合は、ドキュメントごとに 1 つのパーサーを独自のスレッドで実行できます。これにより、少なくとも全体的な作業が並列化され、利用可能なすべての CPU とコアが利用されます。
2) 特定の条件 (< transaction ts="2"> のように) まで読み取る必要がある場合は、その条件に到達するとすぐに解析をスキップできます。パーサーをスキップすると解決する場合は、例外をスローします。
startElement
内の の実装は次のContentHandler
ようになります。
public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException {
if(atts == null) return;
if(localName.equals("transaction") && "2".equals(atts.getValue("ts"))) {
// TODO: Whatever should happen when condition is reached
throw new SAXException("Condition reached. Just skip rest of parsing");
}
}