[英]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.