jQuery获取XML中的匹配节点

时间:2011-06-28 00:15:17

标签: jquery xml

一点背景:我使用XSLT在页面上呈现了一些XML,但我们决定使它更具交互性,所以现在我正在进行jQuery.ajax调用以返回XML,我正在解析它的JavaScript。

我已经能够使用像

之类的代码从中提取特定节点
var qpPlanNode = $(xml).find('MyNode'); 
var qpPlanNum = $(qpPlanNode).children('PLANNUM').text();

然后将计划编号转换为qpPlanNum。但在那个XML中我有类似

的东西
<xml>
  <MyNode>
    <PLANNUM>123</PLANNUM>
    <SOURCE>
      <TYPE>PreTax</TYPE>
      <AMOUNT>1234</AMOUNT>
    </SOURCE>
    <SOURCE>
      <TYPE>AfterTax</TYPE>
      <AMOUNT>456</AMOUNT>
    </SOURCE>
    <SOURCE>
      <TYPE>PreTax</TYPE>
      <AMOUNT>234</AMOUNT>
    </SOURCE>
  </MyNode>
</xml>

我想提取所有具有TYPE特定值的SOURCE节点。我找不到一个简单的jQuery选择器,它会做到这一点。在XSLT中,我正在做<xsl:variable name="afterTaxSources" select="SOURCE[TYPE = 'AfterTax']"/>。什么是JQuery等价物?

2 个答案:

答案 0 :(得分:1)

我可能会使用.parseXML()

var xml = "<xml><MyNode><PLANNUM>123</PLANNUM>    <SOURCE>      <TYPE>PreTax</TYPE>          <AMOUNT>1234</AMOUNT>    </SOURCE>    <SOURCE>      <TYPE>AfterTax</TYPE>          <AMOUNT>456</AMOUNT>    </SOURCE>    <SOURCE>      <TYPE>PreTax</TYPE>          <AMOUNT>234</AMOUNT>    </SOURCE>  </MyNode></xml>"

xmlDoc = $.parseXML(xml)
$xml = $(xmlDoc)
$source = $xml.find('TYPE:contains("AfterTax")').parent();
console.log($source);

http://jsfiddle.net/JdZzH/

<强>替代地
但是,我无法在实例中正常使用

  console.log($('TYPE:contains("AfterTax")').parent('source'));

应该这样做,但是,我无法让jsfiddle工作。它会继续将<MyNode>视为父级,

$('TYPE:contains("AfterTax")').css('text-decoration', 'underline');

按预期工作,我会在jsfiddle以外的地方尝试这个。

Utilmately

我认为.parseXML():contains()正是您所寻找的。

答案 1 :(得分:1)

我偶然发现了这个,看起来它正在起作用:

var pretaxSources = $(qpPlanNode).find('SOURCE:has(TYPE:contains("PreTax"))');

有人看到任何理由不这样做吗?

更好的是,我可以使用

组合多种类型
var pretaxSources = $(qpPlanNode).find('SOURCE:has(TYPE:contains("PreTax"),TYPE:contains("Employee"))');