Javascript 使用jquery,如何迭代xml中的每个节点?
关于下面的示例代码,我还有一个问题 下面是index.html文件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
<!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)的内容,我只是在这里引用。我不知道确切的原因。