【问题标题】:Enumerate top-level tags inside another tag枚举另一个标签内的顶级标签
【发布时间】:2021-03-03 20:23:11
【问题描述】:

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

我有一个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 字符串:car Mark 和 car Model,我需要找到模型的 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 属性。

【问题讨论】:

  • 您能否编辑您的问题,首先显示MarkStringModelString 的内容,其次,根据您的示例x​​ml,您的预期输出到底是什么?

标签: javascript html xml-parsing


【解决方案1】:

要获取某个节点的顶​​级子数组,您应该使用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;

【讨论】:

    猜你喜欢
    • 2013-04-17
    • 1970-01-01
    • 2014-10-04
    • 2020-03-04
    • 2019-06-28
    • 1970-01-01
    • 1970-01-01
    • 2022-12-28
    • 2013-11-21
    相关资源
    最近更新 更多