2016-04-14 9 views
0

文書全体をストリームする方法を見つけましたが、ファイルを大きすぎるとメモリの問題が発生しないようにノードごとにノードをストリームする方法がありますか?ノードごとにストリームXMLノード

private Document document; 
private void stream(OutputStream out) { 
    // write the doc into stream 
    TransformerFactory transformerFactory = TransformerFactory.newInstance(); 
    Transformer transformer; 
    DOMSource source = new DOMSource(document); 
    StreamResult result = new StreamResult(out); 

    try { 
     transformer = transformerFactory.newTransformer(); 
     transformer.transform(source, result); 
    } catch (TransformerException e) { 
     throw new RuntimeException("couldn't stream result to output"); 
    } 
} 

答えて

0

あなたはあなたのタスクを完了し、XMLのチャンクで読み取るための、新しいStAXに(XML用のストリーミングAPI)APIを使用することができます。

Oracle Documentationには例が掲載されており、他のリソースもオンラインで見つけることができます。

0

それはあなたを助けることができる場合さてあなたは常にドキュメントノードを介してトラヴァースに再帰を使用することができます。

Element rootElement = document.getDocumentElement(); 
goThroughAllNodesOneByOne(rootElement); 


goThroughAllNodesOneByOne(Node currentNode){ 
    // Do your logic with the node 
    // EX: currentNode.getNodeName(); currentNode.getNamespaceURI() etc 
    NodeList childNodes = currentNode.getChildNodes(); 
    for (int i = 0; i < childNodes.getLength(); i++) { 
     Node currentNode = nodeList.item(i); 
     if (currentNode.getNodeType() == Node.ELEMENT_NODE) { 
      goThroughAllNodesOneByOne(currentNode); 
     } 
     } 
}