1

我有一个如下的 XML 文件。如何使用 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
             });

}
4

4 回答 4

1

这对我来说很好:

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

$(data).children();

这为您提供了一个 jQuery 元素数组。

然后,您可以使用.nodeName来获取标签的名称:

$(data).children()[0].tagName;  // => "PROGRAMMING"
于 2012-06-15T12:17:36.040 回答
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
});

我将它扩展为 $ 仅仅是因为它是节点操作/遍历。如果它是您在项目中经常使用的东西,我更愿意在其余的操作/遍历逻辑(即 jQuery)中找到它。(扩展 jQuery 存在一些问题,例如名称冲突)

于 2012-06-15T10:45:50.010 回答
0

使用下面的粗体代码来解析 XML 的每个子元素

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

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

         });
于 2013-09-03T13:50:04.980 回答
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);
于 2012-06-15T10:38:52.727 回答