簡體   English   中英

按名稱訪問XML DOM子節點

[英]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)。 我還刪除了你的全局變量ikey了這個例子。

http://jsfiddle.net/GQ8Kd/

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.

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