【问题标题】:Get XML Element By Index Rather than Tag通过索引而不是标记获取 XML 元素
【发布时间】:2012-02-01 01:33:56
【问题描述】:

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

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

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

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

我的问题是:我想创建一个“最近”类别,它只会从 XML 文件的顶部选择前 16 个(或多个),而不管类别如何。有没有办法做到这一点?

【问题讨论】:

    标签: javascript xml xmlhttprequest getelementsbytagname


    【解决方案1】:

    遍历根元素的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);});
    

    【讨论】:

    • 感谢您的快速回复。我正在尝试将孩子添加到数组中,但它似乎不起作用。基本上在选择流派时,我有 x=xmlDoc.getElementsByTagName(genre);然后我从那里与 x 一起工作。在您的 while 循环中,我将其更改为 j
    【解决方案2】:

    试试这个方法。

     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]);
                }
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-17
      • 2013-12-03
      • 2014-05-29
      • 2012-08-06
      • 1970-01-01
      • 2023-01-02
      • 2017-08-27
      • 1970-01-01
      相关资源
      最近更新 更多