Javascript 确定此节点集的长度?

Javascript 确定此节点集的长度?,javascript,firefox,xpath,evaluate,Javascript,Firefox,Xpath,Evaluate,Mozilla的Javascript: while (result) { alert(result.childNodes[0].nodeValue); //txt=txt+result.childNodes[0].nodeValue+"<br/>"; result=nodes.iterateNext(); } 我正在检索XML [编辑] 好的,我把迭代器放在一个for循环中,如下所示: for (var i=0; i<2; i+

Mozilla的Javascript:

  while (result)
    {
    alert(result.childNodes[0].nodeValue);
    //txt=txt+result.childNodes[0].nodeValue+"<br/>";
    result=nodes.iterateNext();
    }
我正在检索XML

[编辑]

好的,我把迭代器放在一个for循环中,如下所示:

  for (var i=0; i<2; i++)
    {
    var res=(xmlNodes.childNodes[0].nodeValue);
    txt=txt+res+"<br/>";
    xmlNodes=xmlQuery.iterateNext();
    }
(变量i=0;i)的

现在我想知道如何
获取节点集的“长度”。如何获取
我会那样做吗

在XPath中,这是使用标准XPath函数实现的

count(someExpression)

计算为
someExpression
选择的节点数

现在我想知道如何 获取节点集的“长度”。如何获取 我会那样做吗

在XPath中,这是使用标准XPath函数实现的

count(someExpression)


计算为
someExpression

选择的节点数。到目前为止,您显示的代码中没有任何问题。如果
childNodes[0]
未定义,则它必须是文本节点或空节点,当尝试访问未定义的
childNodes[0]
nodeValue
等属性时,您应该会看到异常。异常将显示在
警报
或串联,或任何其他类型的访问上

这是您最新问题的答案

现在我想弄清楚如何获得节点集的“长度”。我该怎么做

您可以从evaluate函数返回以下内容:

  • 迭代器
  • 快照
  • 第一节点
我将跳过“第一个节点”,因为这不适用于这种情况

遍历器 使用迭代器,您只能获得一个用于按顺序遍历节点的
iterateNext()
方法。迭代器指的是活动节点,这意味着如果在您遍历结果集时文档中的节点发生更改,迭代器将变为无效

下面是一个使用迭代器遍历每个结果节点的示例:

var results = doc.evaluate("expr", doc, null, ORDERED_SNAPSHOT, null);
var node;

while(node = results.iterateNext()) {
    console.log(node);
}
如果要使用迭代器并查找匹配结果的数量,那么遍历所有节点并在数组中返回它们的包装器函数可能会很有用

function evaluateXPath(document, expression) {
    var ANY_TYPE = XPathResult.ANY_TYPE;
    var nodes = document.evaluate(expression, document, null, ANY_TYPE, null);
    var results = [], node;

    while(node = nodes.iterateNext()) {
        results.push(node);
    }

    return results;
}
将节点作为数组获取并循环数组:

var results = evaluateXPath(doc, "expr");

for(var i = 0; i < results.length; i++) {
    console.log(results[i]);
}
见a


你似乎正在为Firefox开发这个程序。你是否考虑过使用它?它为处理XML文档提供了一个非常简单的接口——用于创建、操作和查询。

< p>我在你所示的代码中没有发现任何问题。如果<代码>子节点[0 ]
未定义,则它必须是文本节点或空节点,当尝试访问未定义的
childNodes[0]
nodeValue
等属性时,您应该会看到异常。异常将显示在
警报
或串联,或任何其他类型的访问上

这是您最新问题的答案

现在我想弄清楚如何获得节点集的“长度”。我该怎么做

您可以从evaluate函数返回以下内容:

  • 迭代器
  • 快照
  • 第一节点
我将跳过“第一个节点”,因为这不适用于这种情况

遍历器 使用迭代器,您只能获得一个用于按顺序遍历节点的
iterateNext()
方法。迭代器指的是活动节点,这意味着如果在您遍历结果集时文档中的节点发生更改,迭代器将变为无效

下面是一个使用迭代器遍历每个结果节点的示例:

var results = doc.evaluate("expr", doc, null, ORDERED_SNAPSHOT, null);
var node;

while(node = results.iterateNext()) {
    console.log(node);
}
如果要使用迭代器并查找匹配结果的数量,那么遍历所有节点并在数组中返回它们的包装器函数可能会很有用

function evaluateXPath(document, expression) {
    var ANY_TYPE = XPathResult.ANY_TYPE;
    var nodes = document.evaluate(expression, document, null, ANY_TYPE, null);
    var results = [], node;

    while(node = nodes.iterateNext()) {
        results.push(node);
    }

    return results;
}
将节点作为数组获取并循环数组:

var results = evaluateXPath(doc, "expr");

for(var i = 0; i < results.length; i++) {
    console.log(results[i]);
}
见a


你似乎正在为Firefox开发这个程序。你是否考虑过使用它?它为处理XML文档提供了一个非常简单的接口——用于创建、操作和查询。

用户DOM检查器来解决问题。如果使用Firebug,请尝试使用<代码>控制台。。特别是如果您要查找的值是
null
未定义的
,您更可能在控制台中看到它,而不是在警报中看到它。我不知道为什么会这样。如何定义
结果
以及要检索的元素的HTML源代码是什么?请使用DOM检查器浏览问题lem.如果您使用的是Firebug,请尝试使用
console.log()
而不是
alert()
。特别是如果您要查找的值是
null
未定义的
,您更可能会在控制台中看到它,而不是在警报中看到它。我不知道为什么会这样。如何定义
result
以及要检索的元素的HTML源代码是什么?谢谢,这非常有启发性。Wo昨晚我研究了一下,最后使用了snapshotLength查询。我想我非常理解您的示例,但我不确定有哪一行(b/c我对javascript非常熟悉):var results=[],node;告诉我是否正确--它将变量results声明为空数组,并声明变量nodes等于results。对吗?我将研究E4X,我想我想在移动到库之前了解查询XML DOM的基本知识。我确信使用库将节省时间…@Troy-
var results=[],node;
将结果声明为空数组,node类似于
null
。我们可以在一行中将多个变量声明为
var a,b,c,…;
。每个变量都可以有一个值,就像我们对结果所做的那样,或者没有值(这将使用
未定义的
对其进行初始化).E4X不是一个库。它是一个只有Firefox浏览器才支持的规范,但它使XML处理变得轻而易举。如果有时间,请签出。谢谢,这非常有启发性。昨晚我使用了snapshotLength查询。我