【问题标题】:Traverse XML with jQuery to get element value使用jQuery遍历XML获取元素值
【发布时间】:2017-05-18 19:00:04
【问题描述】:

我有一些看起来像这样的 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 代码中,我已经将 &lt;nozzle&gt; 元素 bomNode 作为 jQuery 集,即

var bomNode = $("nozzle");

所以,对于每个喷嘴元素,我需要

  1. &lt;nozzle&gt; 元素中获取&lt;attachedToidNumber&gt; 的值。

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

  3. 获取&lt;nominalThickess&gt;中的值 元素。

如您所见,所需&lt;idNumber&gt; 元素的深度可能会有所不同。这也是整个 XML 结构的一个非常小的子集,因此它可能非常大。

我尝试过这样的事情:

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

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

谢谢。

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

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

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

【问题讨论】:

    标签: javascript jquery xml


    【解决方案1】:

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

    shell 不是nozzle 的父级。他们是siblings。试试这个:

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

    但这将返回 true(如果为 true)——而不是实际值。

    【讨论】:

    • 嗯,好的。但是,在获得兄弟姐妹之前,我仍然需要上升到 &lt;nozzle&gt; 元素级别,所以我认为它会类似于 bomNode.parents().eq(1).siblings(),对吧?然后,一旦找到匹配项,我将如何获得 idNumber 的值?
    • 我最好选择bomNode.siblings().eq(1);,但这会返回DOM树列表中的第一个,而不是出现mozzle元素的那个。但这可能会奏效-bomNode.siblings().eq(-2);-尚未对此进行测试,因此无法保证
    猜你喜欢
    • 1970-01-01
    • 2012-07-26
    • 1970-01-01
    • 1970-01-01
    • 2015-02-07
    • 2011-01-14
    • 2018-06-05
    • 1970-01-01
    相关资源
    最近更新 更多