Como converter de análise com DOM para analisar com sax
Pergunta
Estou analisando um documento XML em minha própria estrutura usando DOM, mas em outro pergunta Fui aconselhado a usar sax, como eu converteria o seguinte:
public static DomTree<String> createTreeInstance(String path)
throws ParserConfigurationException, SAXException, IOException {
DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder db = docBuilderFactory.newDocumentBuilder();
File f = new File(path);
Document doc = db.parse(f);
Node node = doc.getDocumentElement();
DomTree<String> tree = new DomTree<String>(node);
return tree;
}
Aqui está o meu construtor de Domtree:
/**
* Recursively builds a tree structure from a DOM object.
* @param root
*/
public DomTree(Node root){
node = root;
NodeList children = root.getChildNodes();
DomTree<String> child = null;
for(int i = 0; i < children.getLength(); i++){
child = new DomTree<String>(children.item(i));
if (children.item(i).getNodeType() != Node.TEXT_NODE){
super.children.add(child);
}
}
}
Solução
A programação contra o Sax é profundamente diferente da programação contra o DOM - Sax é um modelo de push, o DOM é um modelo de tração. Converter seu código de um para o outro é uma tarefa muito não trivial.
Dada a sua situação, eu recomendaria usar Stax em vez de sax. O STAX é uma API de analisador de modelos puxadas, mas tem muitas das mesmas vantagens da abordagem Sax (por exemplo, uso e desempenho de memória).
Stax vem com Java 6, mas se você quiser usá -lo com Java 5, você precisa baixar um processador STAX (por exemplo Woodstox). O site Woodstox tem muitos exemplos para você olhar.