Как конвертировать парсинг с Dom в парсинг с SAX - PullRequest
2 голосов
/ 16 июля 2009

Я анализирую XML-документ в своей собственной структуре, используя DOM, но в другом вопросе мне посоветовали использовать 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;
}

Вот мой конструктор 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);
            }
        }
    }

1 Ответ

4 голосов
/ 16 июля 2009

Программирование в SAX сильно отличается от программирования в DOM - SAX - это модель push, DOM - модель pull. Преобразование вашего кода из одного в другой - очень нетривиальная задача.

Учитывая вашу ситуацию, я бы рекомендовал использовать STAX, а не SAX. STAX является API-интерфейсом синтаксического анализатора с вытягивающей моделью, но обладает многими теми же преимуществами подхода SAX (например, использование памяти и производительность).

STAX поставляется с Java 6, но если вы хотите использовать его с Java 5, вам необходимо загрузить процессор STAX (например, Woodstox ). На сайте Woodstox есть множество примеров, на которые вы можете посмотреть.

...