如何以与收到的完全相同的布局/格式显示XML文件的内容?

时间:2012-10-22 14:16:23

标签: javascript jquery xml parsing loops

我在按照收到的顺序显示XML文件的内容时遇到了一些问题。

例如,XML文件包含页面节点,每个页面节点包含各种子节点,例如 a,b,c 。页面的子节点的布局各不相同,我需要在显示输出中模仿这种布局。

示例XML文件:

<page>      
    <a>
        test content...
    </a>
    <a>
        test content...
    </a>
    <c>
        test content...
    </c>
    <a>
        test content...
    </a>
    <b>
        test content...
    </b>
</page>

目前我收集的内容如下:

$(xml).find('page').each(function(){    

     $(this).find('a').each(function(){ 
         ...doing stuff here
     }

     $(this).find('b').each(function(){ 
         ...doing stuff here
     }

     $(this).find('c').each(function(){ 
         ...doing stuff here
     }

    }

我的问题是,通过使用这种方法收集数据,我得到了这样的显示:

<a>
<a>
<a>
<b>
<c>

然而,我需要的是XML文件中的布局:

<a>
<a>
<c>
<a>
<b>

所以我的问题是,如何迭代XML文件并在一个循环中收集数据,而不是为每个子节点分别进行循环。基本上,我需要Javascript / jQuery相当于:

for(int i = 0; i < File.size; i++){

 if(i==<a>){
  do something
 }
 else if(i==<b>){
  do something
 }
 else if(i==<c>){
  do something
 }
} 

...但 i 可以是字符串,而不仅仅是字符。

2 个答案:

答案 0 :(得分:0)

使用*而不是标记名称

$(xml).find('page').each(function(){    
     $(this).find('*').each(function(){ 
        // ...doing stuff here
     }


    }

DEMO

答案 1 :(得分:0)

谢谢冠军!我喜欢你的风格,你的回答没有给我所有的答案,但我需要找到它们。

$(this).find('*').each(function(){ 
        // ...doing stuff here
}

上面正是我需要以所需的顺序从上到下遍历文件...完美!

我的下一个问题是弄清楚如何在整个过程中访问XML节点,我使用了“if”这样的情况......

if(this.tagName == "a"){
    //...do what i need in here
}

所以最后我的代码看起来像这样:

$(this).find("*").each(function(){

    if(this.tagName == "a"){
      //...doing stuff
    }
    if(this.tagName == "b"){
      //...doing stuff
    }
    if(this.tagName == "c"){
      //...doing stuff
    }
});

..允许我遍历所选的XML文件(或文件中的标签)并按照读取的顺序挑选我所需的数据。 :)