2012-02-01 112 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]); 
      } 
     } 
相关问题