Use INodeVisitor instead of 'instanceof'.

Signed-off-by: Florian Thienel <florian@thienel.org>
diff --git a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/BaseNodeVisitor.java b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/BaseNodeVisitor.java
new file mode 100644
index 0000000..ae0d4d9
--- /dev/null
+++ b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/BaseNodeVisitor.java
@@ -0,0 +1,33 @@
+/*******************************************************************************

+ * Copyright (c) 2012 Florian Thienel and others.

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v1.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v10.html

+ * 

+ * Contributors:

+ * 		Florian Thienel - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.vex.core.internal.dom;

+

+/**

+ * This class provides default implementations for the methods defined by the <code>INodeVisitor</code> interface.

+ * 

+ * @see INodeVisitor

+ * @author Florian Thienel

+ */

+public class BaseNodeVisitor implements INodeVisitor {

+

+	public void visit(final Element element) {

+		// ignore

+	}

+

+	public void visit(final Document document) {

+		// ignore

+	}

+

+	public void visit(final Text text) {

+		// ignore

+	}

+

+}

diff --git a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/Document.java b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/Document.java
index 8e8543b..915eb15 100644
--- a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/Document.java
+++ b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/Document.java
@@ -271,17 +271,21 @@
 	}
 
 	public List<QualifiedName> getNodeNames(final int startOffset, final int endOffset) {
-
 		final List<Node> nodes = getNodes(startOffset, endOffset);
 		final List<QualifiedName> names = new ArrayList<QualifiedName>(nodes.size());
 
-		for (int i = 0; i < nodes.size(); i++) {
-			final Node node = nodes.get(i);
-			if (node instanceof Element) {
-				names.add(((Element) node).getQualifiedName());
-			} else {
-				names.add(Validator.PCDATA);
-			}
+		for (final Node node : nodes) {
+			node.accept(new BaseNodeVisitor() {
+				@Override
+				public void visit(final Text text) {
+					names.add(Validator.PCDATA);
+				}
+
+				@Override
+				public void visit(final Element element) {
+					names.add(element.getQualifiedName());
+				}
+			});
 		}
 
 		return names;
diff --git a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/Element.java b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/Element.java
index 95c950c..f48ef16 100644
--- a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/Element.java
+++ b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/Element.java
@@ -16,7 +16,6 @@
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
@@ -177,14 +176,14 @@
 
 	public List<Element> getChildElements() {
 		final List<Node> nodes = getChildNodes();
-		final Iterator<Node> iter = nodes.iterator();
 		final List<Element> elements = new ArrayList<Element>();
-		while (iter.hasNext()) {
-			// TODO use INodeVisitor once available
-			final Node node = iter.next();
-			if (node instanceof Element) {
-				elements.add((Element) node);
-			}
+		for (final Node node : nodes) {
+			node.accept(new BaseNodeVisitor() {
+				@Override
+				public void visit(final Element element) {
+					elements.add(element);
+				}
+			});
 		}
 		return elements;
 	}