需要根据jquery的属性从jml文件中查找特定节点

时间:2013-11-17 20:03:02

标签: jquery xml

我有这个xml文档。

<search-results>
    <physician>
        <name>some name</name>
        <address>
            <street>some street</street>
            <city>some city</city>
            <state>some state</state>
            <zip-code>some zip</zip-code>
        </address>
        <phone>some phone</phone>
        <url>some url</url>
        <logos>
            <logo type="1">logo1</logo>
            <logo type="2">logo2</logo>
        </logos>
    </physician>
</search-results>

我可以使用此代码列出具有类型1徽标的医生。

$(results).find('physician').each(function () {

          var $physician = $(this);
          var logos = $physician.children('logos');
          var logo = logos.children('logo');

          if (logo.attr('type') == "1")
          {

              var html = '<h3>' + $physician.children('name').text() + '</h3>';
              html += '<p>' + $physician.children('logos').children('logo').text() + '</p>';
              html += '<p>' + logo.attr('type') + '</p>';


              $('#results').append(html);
          }

      });

然而,并非所有医生都有这两个标志。

我需要能够列出身份标识为1的医生,身份标识为2的医生,以及具有这两个标识的医生。我很难找到同时拥有标识1和标识2的医生。任何人都可以指出我正确的方向吗?

1 个答案:

答案 0 :(得分:1)

如果您特别需要按照您给出的特定顺序(徽标1,日志2,然后两者)查找和输出医生,那么您最好的选择是预先计算每种类型医生的清单,然后在其中进行迭代。你需要的订单。

例如,你可以这样做:

var physicians = $(results).find('physician');

var logo1 = physicians.filter(function ( ) {
    return $('logo[type="1"]', this).length > 0;
});
var logo2 = physicians.filter(function ( ) {
    return $('logo[type="2"]', this).length > 0;
});

var physiciansWithLogo1 = logo1.not(logo2);
var physiciansWithLogo2 = logo2.not(logo1);
var physiciansWithBothLogos = logo1.filter(logo2);

前两个过滤器表达式使用filter functions来选择分别具有type="1"type="2"徽标的医生(无论他们是否同时具有这两种类型)。

接下来的两行使用not filter来选择只有一种或另一种徽标的医生。这些变量放在physiciansWithLogo1physiciansWithLogo2变量中,这些变量是包含仅logos分别具有type="1"type="2"的医生的jQuery对象。

最后一行再次使用filter查找包含两种徽标的医生,这些徽标放入jQuery对象physiciansWithBothLogos

一旦你拥有了这三个对象,就可以迭代它们(例如,使用each())并根据需要构建输出。