我有一些具有以下结构的XML:
<pressureVessel>
<closure1>
<topClosure>
<ellipsoidalHead>
<standardComponentData>
<identifier>Ellipsoidal Head #1</identifier>
<idNumber>1111</idNumber>
...
</standardComponentData>
</ellipsoidalHead>
</topClosure>
</closure1>
<closure2>
<bottomClosure>
<ellipsoidalHead>
<standardComponentData>
<identifier>Ellipsoidal Head #2</identifier>
<idNumber>2222</idNumber>
...
</standardComponentData>
</ellipsoidalHead>
</topClosure>
</closure1>
<shell>
<cylinder>
<standardComponentData>
<identifier>Cylinder #1</identifier>
<idNumber>3333</idNumber>
...
</standardComponentData>
....
</cylinder>
<cylinder>
<standardComponentData>
<identifier>Cylinder #2</identifier>
<idNumber>4444</idNumber>
...
</standardComponentData>
....
</cylinder>
<cylinder>
<standardComponentData>
<identifier>Cylinder #3</identifier>
<idNumber>5555</idNumber>
...
</standardComponentData>
....
</cylinder>
<flange>
<standardComponentData>
<identifier>Top Head Flange #1</identifier>
<idNumber>6666</idNumber>
<attachedToidNumber>1111</attachedToidNumber>
...
</standardComponentData>
</flange>
</shell>
<pressureVessel>
我正在解析这个XML的一些javascript中,我将flange元素作为一个名为bomNode
的变量。我需要做的是找到<idNumber>
值与>attachedToidNumber>
元素中的<flange>
匹配的元素(在本例中为Ellipsoidal Head#1)。 <pressureVessel>
中有多个其他元素,所以我需要做的是
closure
开头的任何元素(例如,closure1,closure2等)。<standardComponentData>
,然后<idNumber>
值与<attachedToidNumber>
匹配(我在该点存储在变量中)。那么最有效的方法是什么? <pressureVessel>
下还有其他元素,因此如果我不必要,我不想解析所有这些元素。
我的想法是做
之类的事情var elName = 'closure';
bomNode.parent().parent().find().has(elName).each(function(index() {
// Do something here
})
但是我不知道从哪里开始,或者我是否在正确的轨道上。
答案 0 :(得分:0)
您可以使用.filter()
来匹配<idNumber>
元素,其中.textContent
等于<attachedToIdNumber>
.textContent
$(xml).find("standardComponentData idNumber").filter(function(i, el) {
return $(el).parents().filter(function(i, el) {
return /closure/i.test(el.tagName) }).is("*")
&& el.textContent === xml.find("attachedToidNumber").text()
})
答案 1 :(得分:0)
我根据我对您的用例的最佳理解以及稍微更完整(但仍在猜测)的XML文件对其进行了一次尝试。
closure
开头的所有可用节点的数组。attachableComponents
节点的任何元素填充另一个数组(称为<standardComponentData>
)。 <flang>
的{{1}}的值传递给该函数会从<attachedToidNumber>
数组内部拉出任何匹配的节点。示例JS Bin,将其渲染出来以供视觉参考: