使用jQuery解析嵌套的xml递归目录列表

时间:2013-03-30 15:06:34

标签: jquery xml parsing recursion nested

我有基于xml的递归目录列表。我想从特定目录获取文件列表,例如.By XML我应该只获得img2.gif和img3.gif和img6.gif。但是脚本也返回img4和img5,它们实际上在sub dir中,我不想处理子目录。 目标是从请求的目录中获取文件并忽略嵌套的子目录。 一种方法是将xml结构从嵌套更改为普通,但我不希望这样。 的 XML

<directory name=".">
   <file name="img1.gif" />
   <directory name="images">
      <file name="images/img2.gif" /> 
      <file name="images/img3.gif" /> 
      <directory name="images/delta">
         <file name="images/delta/img4.gif" /> 
         <file name="images/delta/img5.gif" /> 
      </directory>
      <file name="images/img6.gif" /> 
   </directory>
</directory>

JAVASCRIPT

function parse_files(path) {
    $.ajax({
        type: "GET",
        url: "list.xml",
        dataType: "xml",
        success: function(xml) {

            $(xml).find('directory').each(function(){
                if($(this).attr('name')==path) {

                    $(this).find('file').each(function(){
                        var list = $(this).attr('name');
                        alert(list);
                    });
                 }
            });
        }

    });
}

parse_files("images");
// returns img2,img3,img4,img5,img6
// should return img2,img3,img6

1 个答案:

答案 0 :(得分:1)

仅查找包含children()find(' > file')或上下文$(' > file', this)等的直接子项,因为只有find()找到所有后代,甚至是在下一个目录中进一步嵌套的那些:

$(xml).find('directory').each(function(){
     if($(this).attr('name')==path) {
         $(this).children('file').each(function(){
             var list = $(this).attr('name');
             alert(list);
         });
     }
});