如何从Dom解析转换为SAX解析

Rob*_*ert 2 java xml parsing dom sax

我正在使用 DOM 将 XML 文档解析为我自己的结构,但在另一个问题中建议我使用 SAX,我将如何转换以下内容:

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;
}
Run Code Online (Sandbox Code Playgroud)

这是我的 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);
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

ska*_*man 5

针对 SAX 的编程与针对 DOM 的编程有很大不同 - SAX 是推模型,DOM 是拉模型。将代码从一种转换为另一种是一项非常重要的任务。

鉴于您的情况,我建议使用 STAX 而不是 SAX。STAX 是一个拉模型解析器 API,但具有许多与 SAX 方法相同的优点(例如内存使用和性能)。

STAX 附带 Java 6,但如果您想将其与 Java 5 一起使用,则需要下载 STAX 处理器(例如Woodstox)。Woodstox 网站有大量示例供您查看。