Changeset 1:c340d8c839d8 in rrlib_xml-java


Ignore:
Timestamp:
15.12.2013 03:02:33 (8 years ago)
Author:
Max Reichardt <mreichardt@…>
Branch:
default
Phase:
public
Message:

Made iterating over child nodes more convienient

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XMLNode.java

    r0 r1  
    2323 
    2424import java.io.StringWriter; 
     25import java.util.Iterator; 
    2526 
    2627import javax.xml.transform.dom.DOMSource; 
     
    496497 
    497498    /** 
     499     * Use this way: 
     500     * 
     501     *  for (XMLNode child : root.children()) { 
     502     *    ... 
     503     *  } 
     504     * 
     505     * @return Object to iterate over XML node's children using foreach loop 
     506     */ 
     507    public Iterable<XMLNode> children() { 
     508        return new ConstChildIterator(); 
     509    } 
     510 
     511    /** 
    498512     * @return An end-iterator mark to mark the end of children traversal 
    499513     */ 
     
    508522     *  for (ConstChildIterator it = node.getChildrenBegin(); it.get() != node.getChildrenEnd(); it.next()) 
    509523     */ 
    510     public class ConstChildIterator { 
     524    public class ConstChildIterator implements Iterator<XMLNode>, Iterable<XMLNode> { 
    511525 
    512526        private XMLNode current = getNextNode(node.getFirstChild()); 
     
    531545        /** 
    532546         * Advance to next node 
     547         * 
     548         * @return New current node (the one that we just moved to 
    533549         */ 
    534         public void next() { 
     550        public XMLNode next() { 
    535551            current = getNextNode(current.node.getNextSibling()); 
    536         } 
    537  
     552            return current; 
     553        } 
     554 
     555        @Override 
     556        public boolean hasNext() { 
     557            Node nextNode = current.node.getNextSibling(); 
     558            while (nextNode != null) { 
     559                if (nextNode.getNodeType() == Node.ELEMENT_NODE) { 
     560                    return true; 
     561                } 
     562                nextNode = nextNode.getNextSibling(); 
     563            } 
     564            return false; 
     565        } 
     566 
     567        @Override 
     568        public void remove() { 
     569            throw new RuntimeException("Remove operation not supported"); 
     570        } 
     571 
     572        @Override 
     573        public Iterator<XMLNode> iterator() { 
     574            return this; 
     575        } 
    538576    } 
    539577 
Note: See TracChangeset for help on using the changeset viewer.