我决定实施Abstract List<Node>
。这是它的一部分:
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class myNodeList implements NodeList{
Node root = null;
int length = 0;
public myNodeList() {}
public void addNode(Node node) {
if(root == null)
{
root = node;
}
else
root.appendChild(node);
length++;
System.out.println("this is the added node " +node);
}
}
但是当我尝试add
一个节点时,它给了我以下异常:
Exception in thread "main" org.w3c.dom.DOMException: HIERARCHY_REQUEST_ERR: An attempt was made to insert a node where it is not permitted.
at com.sun.org.apache.xerces.internal.dom.NodeImpl.insertBefore(NodeImpl.java:478)
at com.sun.org.apache.xerces.internal.dom.NodeImpl.appendChild(NodeImpl.java:235)
at pageparsertest.myNodeList.addNode(myNodeList.java:27)
这是因为Node root = null;
使节点添加到空节点?
那怎么可以修复
答案 0 :(得分:1)
您无法附加到com.sun.org.apache.xerces.internal.dom.NodeImpl
,您需要使用com.sun.org.apache.xerces.internal.dom.ParentNode
。
appendChild
会致电insertBefore
,Exception
只会NodeImpl
将一个或多个节点移动到我们的子项列表中。请注意这一点 隐式地将它们从之前的父项中删除。
默认情况下,我们不接受任何子节点,ParentNode会覆盖此。
您似乎正在尝试使用第一个节点作为根而不是节点列表来构建节点树。如果您的节点NodeImpl
不是ParentNode
,那么这是不可能的。
如果你想要一棵树,你必须以某种方式创建(或导入)父节点。
如果您只需要一个列表,请使用List
。
您可能需要创建一个假的自定义父级来插入节点。 看看这里:HIERARCHY_REQUEST_ERR while trying to add elements to xml file in a for loop
答案 1 :(得分:0)
这是令人尴尬的,但我改变了我的想法来实现它,而是使用了static List<Node> listOfNodes = new ArrayList<Node>();
,这对我很有用!