private Traverser createTraverser()

in testing/xml-truth/src/main/java/org/apache/axiom/truth/xml/XMLSubject.java [273:353]


    private Traverser createTraverser(XML xml) throws TraverserException {
        Traverser traverser = xml.createTraverser(expandEntityReferences);
        if (ignoreWhitespaceInPrologAndEpilog || ignorePrologAndEpilog) {
            final boolean onlyWhitespace = !ignorePrologAndEpilog;
            traverser =
                    new Filter(traverser) {
                        private int depth;

                        @Override
                        public Event next() throws TraverserException {
                            Event event;
                            while ((event = super.next()) != null) {
                                switch (event) {
                                    case START_ELEMENT:
                                        depth++;
                                        break;
                                    case END_ELEMENT:
                                        depth--;
                                        break;
                                    default:
                                        if (onlyWhitespace) {
                                            break;
                                        }
                                    // Fall through
                                    case WHITESPACE:
                                        if (depth == 0) {
                                            continue;
                                        }
                                }
                                break;
                            }
                            return event;
                        }
                    };
        }
        final Set<Event> ignoredEvents = new HashSet<>();
        if (ignoreComments) {
            ignoredEvents.add(Event.COMMENT);
        }
        if (ignoreWhitespace || ignoreElementContentWhitespace) {
            ignoredEvents.add(Event.WHITESPACE);
        }
        if (!ignoredEvents.isEmpty()) {
            traverser =
                    new Filter(traverser) {
                        @Override
                        public Event next() throws TraverserException {
                            Event event;
                            while (ignoredEvents.contains(event = super.next())) {
                                // loop
                            }
                            return event;
                        }
                    };
        }
        traverser = new CoalescingFilter(traverser);
        if (ignoreWhitespace) {
            traverser =
                    new Filter(traverser) {
                        @Override
                        public Event next() throws TraverserException {
                            Event event = super.next();
                            if (event == Event.TEXT) {
                                String text = getText();
                                for (int i = 0; i < text.length(); i++) {
                                    if (" \r\n\t".indexOf(text.charAt(i)) == -1) {
                                        return Event.TEXT;
                                    }
                                }
                                return super.next();
                            } else {
                                return event;
                            }
                        }
                    };
        }
        if (ignoreRedundantNamespaceDeclarations && !ignoreNamespaceDeclarations) {
            traverser = new RedundantNamespaceDeclarationFilter(traverser);
        }
        return traverser;
    }