[英]Accessing XML DOM child nodes by name
我想在JavaScript中訪問XML對象的textContent屬性。 根項目有幾個孩子,他們自己也有一些孩子。 為了讓孩子們在第一級,我只是遍歷根元素的childNodes數組。 但是為了獲得“孫子”的價值,我想使用像getElementsByTagName()
這樣的東西,這是行不通的。 目前我只是再次遍歷所有子節點並檢查每個子節點的nodeName屬性以獲取我的值。 有沒有辦法按名稱獲取子對象?
XML( 注意:我在內部獲得的XML文檔是未格式化的,沒有空格,沒有#text節點 ):
<root>
<element>
<child1>content</child1>
<child2>content</child2>
<child3>content</child3>
</element>
<element>
<child1>content</child1>
<child2>content</child2>
<child3>content</child3>
</element>
</root>
到目前為止我嘗試了什么:
xmlDoc = xmlhttp.responseXML;
for(i = 0; i < xmlDoc.documentElement.childNodes.length; i++)
{
key = xmlDoc.documentElement.childNodes[i];
alert(key.getElementsByTagName('child1')[0].textContent);
}
這會產生一個消息框: undefined
和控制台錯誤: TypeError:key.getElementsByTagName(...)[0]未定義
瀏覽器:Firefox 26
也許這是DOM對象的問題,我通過以下方式創建它:
var xmlhttp;
if (window.XMLHttpRequest)
{
xmlhttp=new XMLHttpRequest();
}
xmlhttp.onreadystatechange=function()
{
if(xmlhttp.readyState==4 && xmlhttp.status==200)
{
xmlDoc = xmlhttp.responseXML;
問題是節點之間的空間是自動生成的textNodes。 在嘗試查找子項之前,請檢查xmlDoc.documentElement.childNodes[i]
中的textNode
是否為textNode
(nodeType 3)。 我還刪除了你的全局變量i
並key
了這個例子。
var node, childNodes = xmlDoc.documentElement.childNodes;
for(var i = 0; i < childNodes.length; i++)
{
node = childNodes[i];
if(node.nodeType !== Node.TEXT_NODE) console.log(node.getElementsByTagName('child1')[0].textContent);
}
使用以下內容為我獲取所需的child1節點值。
var k = xmlDoc.getElementsByTagName("child1");
for(var i = 0; i < k.length; i++)
{
console.log(k[i].childNodes[0].nodeValue);
}
嘗試getElementsByTagName('child1')[0].nodeValue
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.