将节点添加到节点列表

时间:2012-03-18 11:38:41

标签: java loops nodes nodelist

我的目标是不是一次向NodeList添加节点,而是在每次迭代中将它们添加到循环中。我查找了NodeList的类和方法,但没有找到任何有用的东西。无论如何这样做或我应该使用其他接口? 要做类似下面的事情,但NodeList界面没有“添加”方法。然后我该如何添加项目?

     static NodeList tryToGetThePoint;


    while(true)
       {
        .
        .
        .
    if(!"script".equals(myNode.getParentNode().getNodeName()))
{

tryToGetThePoint.add=myNode;

}

2 个答案:

答案 0 :(得分:3)

您必须记住NodeList中的节点实时 - 如果您更改它们,则需要修改底层DOM树。因此,将事物添加到NodeList是没有意义的 - 您希望它们在树中生活在哪里?

如果您只想要与文档无关的Node列表,请使用List<Node>。否则,您需要确定将节点添加到DOM树的位置并使用常规方法。

更新:我没有注意到你宣布NodeList - 除非你自己实施,否则这不会起作用,因为Perry Monschau说。只需使用List<Node>代替。

答案 1 :(得分:0)

关键的一点是:

“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.addChild(node);
        length++;
    }

    public Node item(int index) {
        if(index < 1) return root;
        Node node = root;
        while(index > 0) {
           node = node.getFirstChild();
           if(node == null) return node;
           index--;
        }
        return node;
    }

    public int getLength() {
        return length;
    }
}