добавление узла в список узлов - PullRequest
0 голосов
/ 18 марта 2012

Моя цель состоит в том, чтобы добавлять узлы не сразу в NodeList, а добавлять их в цикле в каждой итерации. я посмотрел классы и методы для NodeList, но не нашел ничего полезного для него. в любом случае для этого или я должен использовать другие интерфейсы? собираюсь сделать что-то вроде ниже, но интерфейс NodeList не имеет метода «add». как я могу добавить элементы?

     static NodeList tryToGetThePoint;


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

tryToGetThePoint.add=myNode;

}

Ответы [ 2 ]

3 голосов
/ 18 марта 2012

Вы должны помнить, что узлы в NodeList являются live - если вы их измените, вы модифицируете базовое дерево DOM. Поэтому не имеет смысла добавлять вещи в NodeList - где вы ожидаете, что они будут жить в дереве?

Если вы просто хотите, чтобы список Node не был связан с документом, просто используйте List<Node>. В противном случае вам нужно будет выяснить, где добавить узлы в дерево DOM и использовать обычные методы.

ОБНОВЛЕНИЕ: Я не заметил, что вы объявляете NodeList - это не сработает, если вы сами не реализуете его, как говорит Перри Моншау. Просто используйте List<Node> вместо этого.

0 голосов
/ 18 марта 2012

Критический бит об этом:

"Интерфейс 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;
    }
}
...