使用jQuery遍历XML以获取元素值

时间:2017-05-18 19:00:05

标签: javascript jquery xml

我有一些看起来像这样的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");

因此,对于每个喷嘴元件,我需要

  1. <attachedToidNumber>元素中获取<nozzle>的值。

  2. 找到包含匹配的<idNumber>的元素 <attachedToidNumber>(在这种情况下为<shell>)。

  3. 获取<nominalThickess>中的值 元件。
  4. 如您所见,所需<idNumber>元素的深度可能会有所不同。这也是整个XML结构的一个非常小的子集,因此它可能非常大。

    我尝试过这样的事情:

    var attachedToElement = bomNode.parents().find('idNumber').text() === attachedToId;
    

    但我得到了false。获得所需idNumber值的最简单方法是什么?我确定它很简单,但我只是错过了它。

    感谢。

    更新:我意识到bomNode处于最高级别,我不需要上去。一个等级。做这样的事

    var attachedToElement = bomNode.parents().siblings().find('idNumber')
    

    给我一​​个包含<idNumber>元素的子元素列表。所以,我需要找到具有所需值的那个。我的想法是使用.each()。但是,该值是在.each()函数之外定义的,所以我没有任何东西可以匹配。获得匹配列表后,获取具有<idNumber>值的集合的最简单方法是什么?

1 个答案:

答案 0 :(得分:1)

你是对的 - 你错过了一件简单的事情:

var colorChangeValue = 50; //set this to whatever is the deciding color change value var dataset = myChart.data.datasets[0]; for (var i = 0; i < dataset.data.length; i++) { if (dataset.data[i] > colorChangeValue) { dataset.backgroundColor[i] = chartColors.red; } } myChart.update(); 不是shell的父级。他们是nozzle。试试这个:

siblings

但这会返回true(如果为真) - 而不是实际值。