我向我正在处理的一些代码寻求帮助。 但我对AJAX和Jquery并不擅长......所以这就是我的主题:我想获得一个带有外部XML文件的XML(这里是text.xml)并将其解析为一个JSON对象David Walsh的代码(来源:https://davidwalsh.name/convert-xml-json)。 然后有人说这个功能只能在"成功"这就是为什么我在其上做所有功能的原因。 所以我的目标是让我的XML成为JSON对象,我可以更轻松地对待它,我找到一些论坛主题可以回答我的问题,但我的代码不起作用,我不知道为什么......如果你可以帮我谢谢。 有我的代码:
<HTML>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>testSelection</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8/jquery.min.js"></script>
</head>
<body>
<body>
<div id="Div_XML"></div>
</body>
<script>
var xml = $.parseXML('<bds> <serie1 id="1"> <desc> <num> 2 </num><title>we are on 1 </title><commen>HI </commen><URL>Idk</URL></desc><desc><num> 1 </num><title>we are on 2 </title><commen>Hello world </commen><URL>Baptiste</URL></desc></serie1></bds>')
var results = new Array;
var obj = {};
$(document).ready(
function() {
$.ajax({
type: "GET",
url: "text.xml",
dataType: "xml",
success: function(xml) {
var commen = $(this).find('commen').text();
var title = $(this).find('title').text();
var URL = $(this).find('URL').text();
var num = $(this).find('num').text();
$(xml).find('bds').each(
function() {
results.push({
id: $(this).attr('id'),
num: num,
commen: commen,
title: title,
URL: URL});
});
// Changes XML to JSON
// Create the return object
function parseX(results){
if (results.nodeType == 1) { // element
// do attributes
if (results.attributes.length > 0) {
obj["@attributes"] = {};
for (var j = 0; j < results.attributes.length; j++) {
var attribute = results.attributes.item(j);
obj["@attributes"][attribute.nodeName] = attribute.nodeValue;
}
}
} else if (results.nodeType == 3) { // text
obj = results.nodeValue;
}
// do children
if (results.hasChildNodes()) {
for (var i = 0; i < results.childNodes.length; i++) {
var item = results.childNodes.item(i);
var nodeName = item.nodeName;
if (typeof(obj[nodeName]) == "undefined") {
obj[nodeName] = xmlToJson(item);
} else {
if (typeof(obj[nodeName].push) == "undefined") {
var old = obj[nodeName];
obj[nodeName] = [];
obj[nodeName].push(old);
}
obj[nodeName].push(xmlToJson(item));
}
}
}
// Assuming xmlDoc is the XML DOM Document
var jsonText = JSON.stringify(xmlToJson(results));
alert(jsonText);
}
}
)
};
}
}
)
</script>
</body>
</HTML>
所以我的想法是将所有xml数据推入数组,然后将其解析为json。 所以我有疑问:
对不起我的初学者问题......
和text.xml
<?xml version="1.0" encoding="iso-8859-1"?>
<bds>
<serie1 id="1">
<desc>
<num> 1 </num>
<title>nous sommes sur le lien 1 </title>
<commen>Hello </commen>
<URL>Baptiste</URL>
</desc>
<desc>
<num> 2 </num>
<title>nous sommes sur le lien 2 </title>
<commen>HI </commen>
<URL>Baptiste</URL>
</desc>
<desc>
<num> 3 </num>
<title>nous sommes sur le lien 3 </title>
<commen>How are you </commen>
<URL>Gars inconnu</URL>
</desc>
<desc>
<num> 4 </num>
<title>nous sommes sur le lien 4 </title>
<commen>Idk </commen>
<URL>Raymond</URL>
</desc>
<desc>
<num> 5 </num>
<title>nous sommes sur le lien 5 </title>
<commen>Thank you </commen>
<URL>Eric</URL>
</desc>
<desc>
<num> 6 </num>
<title>nous sommes sur le lien 6 </title>
<commen>You're welcome </commen>
<URL>Baptiste</URL>
</desc>
<desc>
<num> 7 </num>
<title>nous sommes sur le lien 7 </title>
<commen>Sorry </commen>
<URL>Céline</URL>
</desc>
</serie1>
<serie2 id="2">
<desc>
<num> 1 </num>
<title>nous sommes sur le lien 1 </title>
<commen>Hello </commen>
<URL>Baptiste</URL>
</desc>
<desc>
<num> 2 </num>
<title>nous sommes sur le lien 2 </title>
<commen>HI </commen>
<URL>Baptiste</URL>
</desc>
<desc>
<num> 3 </num>
<title>nous sommes sur le lien 3 </title>
<commen>How are you </commen>
<URL>Gars inconnu</URL>
</desc>
<desc>
<num> 4 </num>
<title>nous sommes sur le lien 4 </title>
<commen>Idk </commen>
<URL>Raymond</URL>
</desc>
<desc>
<num> 5 </num>
<title>nous sommes sur le lien 5 </title>
<commen>Thank you </commen>
<URL>Eric</URL>
</desc>
<desc>
<num> 6 </num>
<title>nous sommes sur le lien 6 </title>
<commen>You're welcome </commen>
<URL>Baptiste</URL>
</desc>
<desc>
<num> 7 </num>
<title>nous sommes sur le lien 7 </title>
<commen>Sorry </commen>
<URL>Céline</URL>
</desc>
</serie2>
<serie3 id="3">
<desc>
<num> 1 </num>
<title>nous sommes sur le lien 1 </title>
<commen>Hello </commen>
<URL>Baptiste</URL>
</desc>
<desc>
<num> 2 </num>
<title>nous sommes sur le lien 2 </title>
<commen>HI </commen>
<URL>Baptiste</URL>
</desc>
<desc>
<num> 3 </num>
<title>nous sommes sur le lien 3 </title>
<commen>How are you </commen>
<URL>Gars inconnu</URL>
</desc>
<desc>
<num> 4 </num>
<title>nous sommes sur le lien 4 </title>
<commen>Idk </commen>
<URL>Raymond</URL>
</desc>
<desc>
<num> 5 </num>
<title>nous sommes sur le lien 5 </title>
<commen>Thank you </commen>
<URL>Eric</URL>
</desc>
<desc>
<num> 6 </num>
<title>nous sommes sur le lien 6 </title>
<commen>You're welcome </commen>
<URL>Baptiste</URL>
</desc>
<desc>
<num> 7 </num>
<title>nous sommes sur le lien 7 </title>
<commen>Sorry </commen>
<URL>Céline</URL>
</desc>
</serie3>
</bds>
我使用var xml在本地进行测试,但是当我需要从文件中获取XML时,我完全丢失了。 然后我不会在开头使用JSON而不是XML,因为我希望稍后我的项目写入它并且我在JSON中读到它是不可能的...... 顺便说一句,我不能使用XmlHTTPRequest和PHP,我知道这将是更好,更简单的方法... 希望你能回答我的问题并感谢你的阅读。
答案 0 :(得分:0)
所以我让AJAX失效,改为使用它:
// File: readXML.js
var i;
var LinkNum = new Array;
var LinkCommen = new Array ;
var LinkURL = new Array;
var LinkTitle = new Array;
var tab = new Array;
$(document).ready(function(){
// Open the students.xml file
$.get("text.xml",{},function(xml){
// Build an HTML string
myHTMLOutput = '';
myHTMLOutput += '<table width="98%" border="1" cellpadding="0" cellspacing="0">';
myHTMLOutput += '<th>LinkTitle</th><th>LinkCommen</th><th>LinkURL</th><th>LinkNum</th>';
// Run the function for each student tag in the XML file
$('bds',xml).each(function() {
$(this).children().each(function(){
$(this).children().each(function() {
LinkNum.push($(this).children("num").text());
LinkCommen.push( $(this).children("commen").text());
LinkURL.push($(this).children("URL").text());
LinkTitle.push($(this).children("title").text());
});
});
// Build row HTML data and store in string
mydata = BuildStudentHTML(LinkNum,LinkCommen,LinkURL,LinkTitle);
myHTMLOutput = myHTMLOutput + mydata;
});
myHTMLOutput += '</table>';
// Update the DIV called Content Area with the HTML string
$("#ContentArea").append(myHTMLOutput);
});
});
function BuildStudentHTML(LinkNum,LinkCommen,LinkURL,LinkTitle){
// Check to see if their is a "post" attribute in the name field
// Build HTML string and return
for (i=0;i<10;i++)
{
if (LinkNum[i]==6)
{
output = '';
output += '<tr>';
output += '<td>'+ LinkTitle[i] +'</td>';
output += '<td>'+ LinkCommen[i] +'</td>';
output += '<td>'+ LinkURL[i] +'</td>';
output += '<td>'+ LinkNum[i] +'</td>';
output += '</tr>';
return output;
}
}
}
来源:http://www.compoc.com/tuts/
所以基本上我在一个数组中返回我的节点,现在我遇到了一个问题,因为我拿了我的XML的第二和第三系列,但我检索了我在xml上写的内容。 PS:我只是在函数LinkNum == 6中用于测试,我刚才在不同的数组上解析它们以便对它们进行处理。