javascript - 枚举另一个标签内的顶级标签
问题描述
打赌这有点基础,但我不知道该怎么做。
我有一个 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
财产。
解决方案
要获取某个节点的顶级子数组,您应该使用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;
推荐阅读
- elasticsearch - 如何在不停机的情况下更改弹性搜索集群中现有节点的节点类型(数据、主节点或客户端)?
- google-app-maker - 使用 App Maker 在 Google Docs 中创建表格
- c++ - 找到两个链表的合并点?
- sql - SQL 查询根据特定列值以及插入的降序日期过滤记录
- c# - 在单个按钮中逐行将多个 txtbox 值添加到列数据表?C# SQL
- azure-active-directory - 无法在 AAD 中邀请用户作为访客用户
- rest - Angular5 和 java vert.x 的 Http (REST) 失败
- python - 在 Pandas 中使用堆栈
- azure - 有没有办法将团队项目及其工作项从 VSTS (Azure DevOps) 实例导出到本地 TFS 2018 服务器实例?
- python - 在 Turbogears 中同时使用 Kajiki 和 Jinja 不起作用