通过索引而不是标记获取XML元素

时间:2012-02-01 01:33:57

标签: javascript xml xmlhttprequest getelementsbytagname

我正在创建一个视频库,并按照视频类别拆分XML文档,例如:

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

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

等等。我使用XMLHttpRequest来获取我想要的类型的getElementsByTagName()并且它工作正常。

我的问题是:我想创建一个'最新'类别,只需选择XML文件顶部的前16个(或多个),无论类别如何。有没有办法实现这个目标?

2 个答案:

答案 0 :(得分: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]);
            }
        }

答案 1 :(得分:0)

迭代root-element的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);});