我有一些如下所示的 XML:
<closure1>
<topClosure>
<ellipsoidalHead>
<standardComponentData>
<variousElements>
<idNumber>234567</idNumber>
<nominalThickness units="in">0.3750</nominalThickness>
</standardComponentData>
</ellipsoidalHead>
</topClosure>
</closure1>
<shell>
<standardComponentData>
<various_elements>
<nominalThickness units="in">0.6250</nominalThickness>
<idNumber>123456</idNumber>
</standardComponentData>
</shell>
<nozzle>
<standardComponentData>
<various_elements>
<attachedToidNumber>123456</attachedToidNumber>
</standardComponentData>
<nozzle>
在我的 JS 代码中,我已经将 <nozzle>
元素 bomNode
作为 jQuery 集,即
var bomNode = $("nozzle");
因此,对于每个喷嘴元件,我需要
获取
<attachedToidNumber>
元素中<nozzle>
的值。查找包含匹配的
<idNumber>
的元素<attachedToidNumber>
(在本例中为<shell>
)。- 获取
<nominalThickess>
中的值 元素。
如您所见,所需的 <idNumber>
元素的深度可能会有所不同。这也是整个 XML 结构的一个非常小的子集,因此它可能非常大。
我尝试过这样的事情:
var attachedToElement = bomNode.parents().find('idNumber').text() === attachedToId;
但我得到了 false
返回。获得所需的 idNumber
值的最简单方法是什么?我确信这很简单,但我只是想念它。
谢谢。
更新:我意识到 bomNode
位于顶层,我不需要上去。一个等级。做这样的事情
var attachedToElement = bomNode.parents().siblings().find('idNumber')
给我一个包含 <idNumber>
元素的子元素列表。因此,我需要找到具有所需值(value)的那个。我的想法是使用 .each()
。但是,该值是在 .each()
函数之外定义的,因此我没有任何可匹配的内容。获得匹配列表后,获取具有我想要的 <idNumber>
值的集合的最简单方法是什么?
最佳答案
你是对的 - 你错过了一件简单的事情:
shell
不是 nozzle
的父级。他们是 sibling
。试试这个:
var attachedToElement = bomNode.siblings().find('idNumber').text() === attachedToId;
但这将返回 true(如果为 true) - 而不是实际值。
关于javascript - 使用 jQuery 遍历 XML 获取元素值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44055863/