实现List <node> </node>

时间:2014-12-22 08:13:22

标签: java list dom nodelist

我决定实施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;使节点添加到空节点? 那怎么可以修复

2 个答案:

答案 0 :(得分:1)

您无法附加到com.sun.org.apache.xerces.internal.dom.NodeImpl,您需要使用com.sun.org.apache.xerces.internal.dom.ParentNode

appendChild会致电insertBeforeException只会NodeImpl

Source code

  

将一个或多个节点移动到我们的子项列表中。请注意这一点   隐式地将它们从之前的父项中删除。

     

默认情况下,我们不接受任何子节点,ParentNode会覆盖此

了解Axis如何实施:http://grepcode.com/file/repo1.maven.org/maven2/com.ning/metrics.collector/1.0.2/org/apache/axis/message/NodeListImpl.java

您似乎正在尝试使用第一个节点作为根而不是节点列表来构建节点树。如果您的节点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>(); ,这对我很有用!