0

私の目的は、ノードを NodeList に一度に追加するのではなく、各反復でループに追加することです。NodeList のクラスとメソッドを調べましたが、有用なものは見つかりませんでした。とにかくこれを行うためのものはありますか、それとも他のインターフェイスを使用する必要がありますか? 以下のようなことをしようとしていますが、NodeList インターフェイスには「追加」メソッドがありません。どうすれば項目を追加できますか?

     static NodeList tryToGetThePoint;


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

tryToGetThePoint.add=myNode;

}
4

2 に答える 2

3

NodeListのノードはライブであることを覚えておく必要があります。ノードを変更すると、基礎となる DOM ツリーが変更されます。したがって、ものを a に追加することは実際には意味がありませんNodeList。ツリーのどこにそれらが存在することを期待していますか?

Nodeドキュメントに関連付けられていないのリストが必要な場合は、 を使用してList<Node>ください。それ以外の場合は、ノードを DOM ツリーに追加する場所を見つけて、通常の方法を使用する必要があります。

更新:あなたが宣言していることに気づきませんでしたNodeList-ペリーモンシャウが言うように、自分で実装しない限り、これは機能しません。List<Node>代わりに 使用してください。

于 2012-03-18T11:57:56.887 に答える
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;
    }
}
于 2012-03-18T11:58:49.453 に答える