}
return out;
}
ParentNode parent = result;
boolean backtracking = false;
while (true) {
if (current.hasChildNodes() && !backtracking) {
current = current.getFirstChild();
backtracking = false;
}
else if (current == element) {
break;
}
else if (current.getNextSibling() != null) {
current = current.getNextSibling();
backtracking = false;
}
else {
current = current.getParentNode();
backtracking = true;
if (parent.getParent() != null) parent = parent.getParent();
continue;
}
int type = current.getNodeType();
if (type == org.w3c.dom.Node.ELEMENT_NODE) {
Element child = makeElement((org.w3c.dom.Element) current, factory);
if (child != null) {
parent.appendChild(child);
if (current.hasChildNodes()) parent = child;
}
}
else {
Nodes children = convert(current, factory);
for (int i = 0; i < children.size(); i++) {
parent.appendChild(children.get(i));
}
}
}