我的目标是不是一次向NodeList添加节点,而是在每次迭代中将它们添加到循环中。我查找了NodeList的类和方法,但没有找到任何有用的东西。无论如何这样做或我应该使用其他接口? 要做类似下面的事情,但NodeList界面没有“添加”方法。然后我该如何添加项目?
static NodeList tryToGetThePoint;
while(true)
{
.
.
.
if(!"script".equals(myNode.getParentNode().getNodeName()))
{
tryToGetThePoint.add=myNode;
}
答案 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;
}
}