首页 > 解决方案 > 枚举另一个标签内的顶级标签

问题描述

打赌这有点基础,但我不知道该怎么做。

我有一个 xml,它有ModelList标签,其中包括很多Model标签,其中还包括 标签 Model

<ModelList>
    <Model name="Name">
         <Model name="SubName" id="ID"></Model>
         ...
    </Model>
    <Model name="Name2">
         <Model name="SubName2" id="ID2"></Model>
         ...
    </Model>
</ModelList>

顶级Model标签代表车辆标记,低级别代表车型。

我有 2 个 js 字符串:汽车标记和汽车模型,我需要找到模型的 id。

不幸的是,老实说,我从来没有经常使用 xml,所以我寻求帮助。

我做的唯一事情是

var parser = new DOMParser();
var xmlDoc = parser.parseFromString(xmlString, "text/xml");

var element = xmlDoc.getElementsByTagName("ModelList")[0];

所以,我认为,接下来我需要遍历所有顶级Model并将它们的Name属性与我的标记字符串进行比较。如果它们相等,则对内部Model标签执行相同的操作,搜索模型。

我认为它应该是这样的

for(var i=0;i<element.length;i++)
   if(element[i].Name==MarkString)
     for(var j=0;j<element[i].length;j++)
   if(element[i][j].Name==ModelString)
        return element[i][j].id;

但不幸的是,element没有length财产。

标签: javascripthtmlxml-parsing

解决方案


要获取某个节点的顶​​级子数组,您应该使用childNodes属性:

domElement.childNodes

那是一个支持length属性的对象。

另外,就我而言,方法中不需要getElementsByTagName。因此,就我而言,解决方案是:

var parser = new DOMParser();
var xmlDoc = parser.parseFromString(xmlString, "text/xml");

for(var i=0; i<xmlDoc.childNodes.length; i++)
  if(xmlDoc.childNodes[i].getAttribute('Name') == MarkString)
for(var j=0; j<xmlDoc.childNodes[i].childNodes.length; j++)
  if(xmlDoc.childNodes[i].childNodes[j].getAttribute('Name') == ModelString)
    return element[i][j].id;

推荐阅读