0

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

     static NodeList tryToGetThePoint;


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

tryToGetThePoint.add=myNode;

}
4

2 回答 2

3

你必须记住 a 中的节点NodeList活动的——如果你改变它们,你就是在修改底层的 DOM 树。因此,将东西添加到 a 中并没有什么意义NodeList——您希望它们住在树的什么地方?

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

更新:我没有注意到你在声明NodeList- 除非你按照 Perry Monschau 所说的那样自己实现它,否则这将不起作用。改用就好List<Node>了。

于 2012-03-18T11:57:56.887 回答
0

关于这一点的关键是:

“NodeList 接口提供了节点有序集合的抽象,而无需定义或限制该集合的实现方式。”

简而言之:由你来实现一切。

您确定不能使用 Lists 代替吗?我的意思是,这取决于这是为了什么?

但是,如果您确实想实现自己的,那么大致应该是这样。

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;
    }
}
于 2012-03-18T11:58:49.453 回答