2012-02-01 98 views
0

我創建一個視頻庫,並有一個XML文檔拆分這家由視頻類別,如:獲取XML元素通過索引,而不是標籤

<video> 
    <comedy> 
     <url>bla</url> 
     <title>blabla</title> 
    </comedy> 

    <action> 
     <url>bla</url> 
     <title>blabla</title> 
    </action> 
</video> 

等。我使用一個XMLHttpRequest getElementsByTagName()爲我想要的流派,它工作正常。

我的問題是:我想要創建一個「最近期」類別,只需從XML文件的頂部選擇前16個(或多個),而不考慮類別。有沒有辦法做到這一點?

回答

0

遍歷根元件的的childNodes,並檢查是否所述節點是一個元素節點(的childNodes也將返回textNodes爲空格)

var doc=xml,//the xml-document 
      childs=doc.documentElement.childNodes, 
       i=-1, 
       j=16;//how many nodes you like to get 

    while(j && childs[++i]) 
    { 
     if(childs[i].nodeType===1)//check if we got a element-node 
     { 
     j--; 
     //do something with the element 
     console.log(childs[i].tagName); 
     } 
    } 

在一些瀏覽器也有可能是一個兒童財產,它只返回元素節點的孩子,但這不是標準的,所以我不會建議使用它。

當你使用一個庫如jQuery它會更容易,有你只需要相同的結果:

$('>*:lt(16)',xml.documentElement) 
    .each(function(i,o){console.log(o.tagName);}); 
+0

謝謝你的快速反應。我試圖將孩子添加到一個數組,但它似乎並沒有工作。 基本上,當選擇流派,我有x = xmlDoc.getElementsByTagName(流派); 然後我從那裏工作。 在你的while循環中,我將它更改爲j <16,其中j從0開始,然後在循環中我有: x [j] = childs [i]; 但它似乎沒有工作。有什麼想法嗎?提前致謝。 – dougmacklin 2012-02-01 03:28:06

0

試試這種方法。

xmlDoc.LoadXml(xml); 

    XmlElement ele = xmlDoc.DocumentElement; 

    if (ele.HasChildNodes) 
    { 
     for (int c = 0; c < ele.ChildNodes.Count; c++) 
     { 
      DisplayInfo(ele.ChildNodes[c]); 
     } 
    } 


static void DisplayInfo(XmlNode node) 
     { 
      for (int a = 0; a < node.Attributes.Count; a++) 
      { 
       Console.WriteLine(node.Attributes[a].Name + " : " + node.Attributes[a].Value); 
      } 

      Console.WriteLine(node.Value); 

      for (int c = 0; c < node.ChildNodes.Count; c++) 
      { 
       DisplayInfo(node.ChildNodes[c]); 
      } 
     } 
相關問題