Как отобразить содержимое файла XML в том же макете/формате, в котором оно было получено?

У меня возникли проблемы с отображением содержимого XML-файла в том порядке, в котором он был получен.

Например, файл XML содержит узлы page, каждый узел страницы содержит различные подузлы, такие как 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 может быть строкой, а не просто символом.


person user1005240    schedule 22.10.2012    source источник


Ответы (2)


Используйте * вместо имени тега

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


    }

ДЕМО

person Champ    schedule 22.10.2012

Спасибо Чемп! Мне нравится твой стиль, твой ответ дал мне не все ответы, но толчок, который мне нужен, чтобы их найти.

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

Выше это именно то, что мне нужно, чтобы перебрать файл сверху вниз в требуемом порядке... отлично!

Моя следующая проблема заключалась в том, чтобы выяснить, как получить доступ к узлам XML по пути, я использовал такие случаи «если», как так...

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 (или тег внутри файла) и выбирать данные, которые мне нужны, по пути, в том порядке, в котором они были прочитаны. :)

person user1005240    schedule 23.10.2012