簡體   English   中英

確定此節點集的長度?

[英]Determine the length of this Node-set?

Mozilla的Javascript:

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

這是為了從xml文件返回一系列字符串。 當我使用警報線時,它會按預期使用系列中的正確字符串進行警報。 注釋行上的“txt”變量應該在函數中向下進入innerHTML。 但Firebug一直告訴我result.childNodes [0]未定義。 為什么要在警報中定義,而不是在下一行定義?

我希望有足夠的代碼來確定問題...如果不是,我會發布更多。

感謝幫助

[編輯]

這是結果的定義:

  var x=xmlDoc.responseXML;
  var nodes=x.evaluate(path, x, null, XPathResult.ANY_TYPE, null);
  var 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();
    }

因為我有一個理論,一旦迭代為空,循環就會失敗。 這就是發生了什么 - 它一直有效,直到我將循環設置為高於可用節點數量的一個實例。 現在我想弄清楚如何獲得節點集的“長度”。 我怎么做?

到目前為止,我沒有看到您顯示的代碼中的任何問題。 如果未定義childNodes[0] ,則它必須是文本節點或空節點,並且在嘗試訪問未定義的childNodes[0] nodeValue屬性時應該看到異常。 該異常將顯示在alert或連接或任何其他類型的訪問上。

這是您更新的問題的答案。

現在我想弄清楚如何獲得節點集的“長度”。 我怎么做?

您可以從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]);
}

快照

快照在查詢時提供節點的靜態結果。 對文檔的更改不會影響此快照。 這里有用的接口是snapshotLength屬性和snapshotItem(index)函數。

以下是使用快照結果的示例:

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

for(var i = 0; i < results.snapshotLength; i++) {
    var node = results.snapshotItem(i);
    console.log(node);
}

查看一個工作示例

看來你正在為Firefox開發這個。 您是否考慮過將E4X用於此目的? 它為處理XML文檔提供了一個非常簡單的界面 - 用於創建,操作和查詢。

現在我想弄清楚如何獲得節點集的“長度”。 我怎么做?

在XPath中,這是使用標准XPath count()函數實現的。

count(someExpression)

計算someExpression選擇的節someExpression

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM