Custom сложные фильтры для выбора узлов

За исключением битовых масках выявления узлов, типов показывает, во время похода DOM-дерево, как итератор и Уокер позволяет использовать пользовательские фильтры узлов. Такие фильтры могут выполняет более сложные действия, чтобы решить, должна быть передана узле или нет .

Пример ниже показывает элемент-фильтр, основанный Имя пользования:


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.NodeIterator;



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");



      // get the traversal:

      DocumentTraversal traversal = (DocumentTraversaldocument;

      

      NodeIterator iterator = traversal.createNodeIterator(

        document.getDocumentElement(), NodeFilter.SHOW_ALL,

        new ItemFilter()true);



      for (Node n = iterator.nextNode(); n != null; n = iterator.nextNode()) {

        System.out.println("Element: " ((Elementn).getTagName());

      }



    catch (Exception ex) {

      ex.printStackTrace();

    }

  }

  

  // accepts only DOM-element with tag-name 'item':

  private static final class ItemFilter implements NodeFilter {

    // this will be applied to each specified node in order to indicate

    // should it be visible in the logical view:

    public short acceptNode(Node n) {

      if (instanceof Element) {

        if (((Elementn).getTagName().equals("item")) {

          return NodeFilter.FILTER_ACCEPT;

        }

      }

      return NodeFilter.FILTER_REJECT;

    }

  }

}

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

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

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