jQuery для получения соответствующих узлов в XML - PullRequest
2 голосов
/ 28 июня 2011

Немного предыстории: я рендерил немного XML на странице, используя XSLT, но мы решили сделать его более интерактивным, и теперь я делаю вызов 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>

Я хотел бы извлечь все узлы SOURCE, которые имеют конкретное значение для TYPE. Я не могу найти простой селектор jQuery, который это сделает. В XSLT я делал <xsl:variable name="afterTaxSources" select="SOURCE[TYPE = 'AfterTax']"/>. Что такое эквивалент JQuery?

Ответы [ 2 ]

1 голос
/ 28 июня 2011

Я только что наткнулся на этот, который, кажется, работает:

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

Кто-нибудь видит какие-либо причины, почему это не будет?типы, использующие

var pretaxSources = $(qpPlanNode).find('SOURCE:has(TYPE:contains("PreTax"),TYPE:contains("Employee"))');
1 голос
/ 28 июня 2011

Я бы, вероятно, использовал .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/

1010 * альтернативно *
однако, я не могу заставить это работать должным образом в живом примере

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

должен это сделать, однако у меня возникли проблемы с запуском jsfiddle. он продолжает видеть <MyNode> как родителя, однако,

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

работает как положено, я бы попробовал это в чем-то ином, чем jsfiddle.

Utilmately

Я думаю .parseXML () и : содержит () - это то, что вы ищете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...