jQuery在xml dom中删除或分组相同的节点

时间:2015-04-19 11:37:29

标签: jquery xml parsexml

我是jQuery的新手,并且操纵xml doms。所以如果我的问题不是原谅我的话。

我的XML示例:

<Urunler>
<Urun>
  <ID>21955</ID>
  <Mensei>Coke</Mensei> /* Contains Same Value */
</Urun>
<Urun>
  <ID>21956</ID>
  <Mensei>Coke</Mensei> /* Contains Same Value */
</Urun>
<Urunler>

我的Ajax Call和Jquery代码将它们显示为html dom:

$.ajax({
        url: 'webservice/Resim/Stokkart.xml',
        dataType: 'xml',
        cache:true,
        success: parseXml
});

function parseXml(xml) {
        $(xml).find("Urun").filter(function () {
            return $(this).find("ASTipNo").text() == categoryCode;
        }).each(function () {
            $('#product-list').append(
                '<div class="product-name col-lg-12 col-md-12 col-sm-12 col-xs-12"></div>'+
                    '<h5 style="color:red;">' + $(this).find("Mensei").text() + '</h5>'+
                '</div>'
            );
        });
    }

我想要实现的目标;我想删除重复的<Urun>节点,如果它们在我的xml文档中具有相同的<Mensei>值,或者我可以将它们合并到一个节点中(如SQL中的GROUP BY)?

PS:我无法在服务器端执行此操作,因为我正在开发cordova上的离线移动应用程序。

任何帮助都会大大增加。

1 个答案:

答案 0 :(得分:1)

http://jsfiddle.net/9cdwLta4/

    var xmlString = "
<Urunler>
  <Urun>  
   <ID>21955</ID>  
   <Mensei>Coke</Mensei> 
  </Urun>
  <Urun>  
   <ID>21956</ID>  
   <Mensei>Coke</Mensei> 
  </Urun>
  <Urun>  
   <ID>21957</ID>  
   <Mensei>Test</Mensei> 
  </Urun>
<Urunler>";



   var menseiA = [];
   var $xml = $(xmlString);
   var $uruns = $xml.find("Urun");

   //output xml    
    $xml.find("Urun").each(function () {
        var id = $(this).find('ID').text();
        var mensei = $(this).find('Mensei').text();
        console.log(id + ':' + mensei);
    });
    console.log('=====================');

    //finds and removes duplicates
    $uruns.each(function () {
        var mensei = $(this).find('Mensei').text();
        if (jQuery.inArray(mensei, menseiA) !== -1) $(this).remove();
        menseiA.push(mensei);
    });

    //output new xml
    $xml.find("Urun").each(function () {
        var id = $(this).find('ID').text();
        var mensei = $(this).find('Mensei').text();
        console.log(id + ':' + mensei);
    });