Javascript 使用jquery,如何迭代xml中的每个节点?

Javascript 使用jquery,如何迭代xml中的每个节点?,javascript,jquery,xml,node.js,Javascript,Jquery,Xml,Node.js,关于下面的示例代码,我还有一个问题 下面是index.html文件 <!DOCTYPE html> <html> <head> <script src="http://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script> <style> #frm, #raw {display:b

关于下面的示例代码,我还有一个问题

下面是index.html文件

<!DOCTYPE html>
<html>
    <head>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>

        <style>
            #frm, #raw {display:block; float:left; width:210px},
            #raw {height:150px; width:310px; margin-left:0.5em}
        </style>
        <title> INDEX </title>
    </head>

    <body>
        <form id="frm">
            Profile: <select id="profiles">
            <option> </option>
            </select>
            <br></br>

            Format:<select id="formats">
            <option value="json"> JSON </option>
            <option value="xml"> XML </option>
            </select>
            <br></br>
            <div id="output"></div>
        </form>
        <textarea id="raw"></textarea>
    </body>

    <script>
        $.get("http://localhost:8080/profiles",function (profile_names) {
            $.each(profile_names, function (i, pname) {
                $("#profiles").append("<option>" + pname + "</option>");
            });
        }, "json");
        $("#formats, #profiles").change(function () {
            var format = $("#formats").val();
            $.get("http://localhost:8080/profile/" + $("#profiles").val() + "." + format,
                function (profile, stat, jqXHR) {
                    var cT = jqXHR.getResponseHeader("Content-Type");
                    $("#raw").val(profile);
                    $("#output").html('');
                    if (cT === "application/json") {
                        $.each($.parseJSON(profile), function (k, v) {
                            $("#output").append("<b>" + k + "</b> : " + v + "<br>");
                        });
                        return;
                    }

                    if (cT === "application/xml") {
                        xmlDoc = $.parseXML( profile ),
                        $xml = $( xmlDoc );
                        $($xml).each(function(){
                            $("#output").append($(this).text() + "<br/>");
                         });
                    }
                }, 
            "text");
        });
    </script>
</html>
下面是profiles.js文件

module.exports = {
    ryan: {
        name: "Ryan Dahl",
        irc: "ryah",
        twitter: "ryah",
        github: "ry",
        location: "San Francisco, USA",
        description: "Creator of node.js"
    },
    isaac: {
        name: "Isaac Schlueter",
        irc: "isaacs",
        twitter: "izs",
        github: "isaacs",
        location: "San Francisco, USA",
        description: "Former project gatekeeper, CTO npm, Inc."
    }
};
在index.html文件中

如果(cT==“application/xml”){与JSON one相比工作不正常,则在之后

实际上,最初的示例代码是这样的

if (cT === "application/xml") {
    profile = jqXHR.responseXML.firstChild.childNodes;
    $.each(profile, function (k, v) {
    if (v && v.nodeType === 1) {
        $("#output").append("<b>" + v.tagName + "</b> : " + v.textContent + "<br>");
    }
});
if(cT==“应用程序/xml”){
profile=jqXHR.responseXML.firstChild.childNodes;
$。每个(配置文件、功能(k、v){
if(v&&v.nodeType==1){
$(“#输出”).append(“+v.tagName+”:“+v.textContent+”
”); } });
但上面的一个不起作用,所以我搜索了一种方法来显示所有的子节点和文本

选中一个

XML是否可以显示与index.html文件中选择的JSON相同的格式


感谢您理解dissy问题!!!

我找到了我想要显示元素名称和文本的方法

if (cT === "application/xml") {
    var xmlDoc =$.parseXML( profile );
    var $xml = $(xmlDoc);
    var kids = $xml.children().children();
    kids.each(function(){
        var tagName=this.tagName;
        var val=$(this).text();
        $("#output").append("<b>" + tagName + "</b> : " + val + "<br>");
    });     
}
if(cT==“应用程序/xml”){
var xmlDoc=$.parseXML(概要文件);
var$xml=$(xmlDoc);
var kids=$xml.children().children();
kids.each(function(){
变量标记名=this.tagName;
var val=$(this.text();
$(“#输出”).append(“+tagName+”:“+val+”
”); }); }
我不知道为什么,但当为“tj”解析概要文件时,下面是结果

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<tj>
  <name>TJ Holowaychuk</name>
  <irc>tjholowaychuk</irc>
  <twitter>tjholowaychuk</twitter>
  <github>visionmedia</github>
  <location>Victoria, BC, Canada</location>
  <description>Author of express, jade and many other modules</description>
</tj>

霍洛韦丘克酒店
tjholowaychuk
tjholowaychuk
视觉媒体
维多利亚,不列颠哥伦比亚省,加拿大
express、jade和许多其他模块的作者
所以$xml的第一个子元素是
,所以我使用了children()方法两次,然后

我可以迭代所有
e
s子项,然后打印子项的名称和文本

if (cT === "application/xml") {
    var xmlDoc =$.parseXML( profile );
    var $xml = $(xmlDoc);
    var kids = $xml.children().children();
    kids.each(function(){
        var tagName=this.tagName;
        var val=$(this).text();
        $("#output").append("<b>" + tagName + "</b> : " + val + "<br>");
    });     
}
有人能清楚地解释我的代码吗

请让我知道


谢谢。

您不是想要迭代的
$xml.children()
吗?正如您在这里尝试迭代的根元素应该是单个的。顺便说一下,
$xml
已经是jQuery元素了,可能是因为它的前缀是$,所以不需要再次将其包装起来
$($xml)
这就足够了
$xml
@gilesc我找到了新的方法来显示它们的每个子元素名称和文本。你可以看到这个问题的答案。关于$($xml)的内容,我只是在这里引用。我不知道确切的原因。