Как пройти через DOM дерево с помощью TreeWalker

DOM интерфейс предлагает хороший инструмент для просмотра дерева. Это интерфейс TreeWalker. Это позволяет выполняет фильтрацию на узле потоке, удобная навигация и сохранения текущей позиции для следующих возвращения. Пример приложения приведены пройти ДОМ-дерево на элементе только с помощью TreeWalker:


import javax.xml.parsers.DocumentBuilder;

import javax.xml.parsers.DocumentBuilderFactory;



import org.w3c.dom.traversal.DocumentTraversal;

import org.w3c.dom.traversal.NodeFilter;

import org.w3c.dom.traversal.TreeWalker;



import org.w3c.dom.*;



/**

 * This sample program using tree-walker for

 * non-linear traverse of DOM-document.

 */



public class Test {

  public static void main(String[] args) {

  try {

    // load the document from a file:

    DocumentBuilderFactory factory = 

      DocumentBuilderFactory.newInstance();

    DocumentBuilder loader = factory.newDocumentBuilder();

    Document document = loader.parse("sample.xml");



    // this cast is checked on Apache implementation (Xerces):

    DocumentTraversal traversal = (DocumentTraversaldocument;



    TreeWalker walker = traversal.createTreeWalker(

      document.getDocumentElement()

      NodeFilter.SHOW_ELEMENT, null, true);



    traverseLevel(walker, "");



  catch (Exception ex) {

    ex.printStackTrace();

  }

  }



  private static final void traverseLevel(TreeWalker walker, 

    String indent) {

  

    // describe current node:

    Node parend = walker.getCurrentNode();

    System.out.println(indent + "- " 

      ((Elementparend).getTagName());



    // traverse children:

    for (Node n = walker.firstChild(); n != null

      n = walker.nextSibling()) {

      

      traverseLevel(walker, indent + '\t');

    }



    // return position to the current (level up):

    walker.setCurrentNode(parend);

  }

}

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>