2012-06-15 8 views
1

У меня есть XML-файл следующим образом. Как я могу прочитать все элементы с помощью JQuery. Обратите внимание, что я не знаю, имена элементов ребенка при обработке файлаКак читать все дочерние элементы элемента с помощью JQuery

<Skills> 
    <Programming>Yes</Programming> 
    <Networking>No</Networking> 
    <ProjectMangement>Yes</ProjectMangement> 
</Skills> 


$.ajax({ 
      url: 'application_form.xml', 
      dataType: "xml", 
      success: parse, 
      error: function(){alert("Error: Something went wrong");} 
     }); 

function parse(document){ 
      $(document).find("Skills").each(function(i,e){ 

       //here i want to get the name of all the child elements 
      }); 

} 
+1

будет ли только дети, или дети детей? вы хотите только ребенок? –

+0

Проблемы есть, это XM L-файл обновляется динамически, и я не знаю имя пользователя при обработке файла. Поэтому я не могу получить доступ к узлу по их имени. – Duleendra

+0

@shashi Это исправлено или даже это тоже меняется ??? – swapnesh

ответ

0

Используйте этот код и редактировать согласно вашему требованию:

var xmlString = "<route><name>Lakeway</name><abrv>LAKE</abrv><eta><time>00:30</time>  <dest>MAIN</dest></eta></route>", 
xmlDoc = $.parseXML(xmlString), 
$xml = $(xmlDoc), 
$abrv = $xml.find("abrv").text() == "LAKE" ? $xml.find("abrv") : false; 

var time = $abrv.next().children("time").text(); 
var dest = $abrv.next().children("dest").text(); 

alert(time + " " + dest); 
0

вы можете выбрать корневой узел, а затем пересекает детскую коллекцию. Если вы ожидаете больше уровней детей, то сделать это рекурсивно

$.fn.iterateChildren = function(fun){ 
    this.each(function(){ 
     if(fun(this)){ 
      this.iterateChildren(fun); 
     } 
    }); 
} 

вы можете выбрать свой корень и называете этой функцию

$(document).find("Skills").iterateChildren(function(){ 
    //do some stuff 
    //return true if you wish to keep iterating the siblings of the current node 
    //return false if you wish to end the iteration (equivalent to break in a for loop 
}); 

Я сделал это расширение до $ просто по той причине, что это манипуляция/обход узлов. Если это то, что вы часто используете в проекте, я бы предпочел найти его с остальной логикой манипуляции/обхода Ie jQuery. (Есть проблемы с JQuery расширения, такие как namecollisions)

1

Это работало отлично для меня:

var data = "<Skills><Programming>Yes</Programming><Networking>No</Networking><ProjectMangement>Yes</ProjectMangement></Skills>" 

$(data).children(); 

Это дает вам массив JQuery элементов.

Вы можете использовать .nodeName, чтобы получить имя тега:

$(data).children()[0].tagName; // => "PROGRAMMING" 
+0

Спасибо, Мэтью, это сработало и для меня. – Duleendra

0

Используйте код ниже полужирным шрифтом, разобрать каждый дочерние элементы XML

функция синтаксического анализа (документ) { $ (документ). найти («Skills»). каждую (функция (я, е) {

  //here i want to get the name of all the child elements 
      **$(this).children().each(function() {      
       alert($(this).text()); 
      });** 

     }); 
Смежные вопросы