2016-04-14 3 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

Вы можете использовать новый API-интерфейс StAX (Streaming API для XML) для выполнения своей задачи и чтения в кусках XML.

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); 
     } 
     } 
} 
Смежные вопросы