我是jquery的新手。我试图使用jquery解析xml字符串。我找到了一个样本:
$(function () {
$.get('data.xml', function (d) {
var data = "";
var startTag = "<table border='1' id='mainTable'><tbody><tr><td style=\"width: 120px\">Name</td><td style=\"width: 120px\">Link</td></tr>";
var endTag = "</tbody></table>";
$(d).find('url').each(function () {
var $url = $(this);
var link = $url.find('link').text();
var name = $url.find('name').text();
data += '<tr><td>' + name + '</td>';
data += '<td>' + link + '</td></tr>';
});
$("#content").html(startTag + data + endTag);
});
});
在这种情况下,我能够解析并从xml文件中获取值,但是现在我要查找的是不是从URL读取文件,我想从字符串中读取xml。比方说,我想解析一个由格式良好的xml组成的字符串而不是data.xml。
有没有人对此有任何想法?
提前致谢
编辑:
我在xml上尝试了一个示例代码;
<?xml version="1.0" encoding="utf-8" ?>
<Urls>
<url>
<name>google</name>
<link>www.google.com</link>
</url>
<url>
<name>aspdotnetcodebook</name>
<link>http://aspdotnetcodebook.blogspot.com</link>
</url>
</Urls>
当我在xml文件上尝试这个时,一切正常。但是当我切换到字符串时,它没有为link属性返回任何内容。我称之为;
$(function() {
var data = $('<?xml version="1.0" encoding="utf-8" ?><Urls><url><name>google</name><link>www.google.com</link></url><url><name>aspdotnetcodebook</name><link>http://aspdotnetcodebook.blogspot.com</link></url></Urls>');
alert(data);
doWhateverItIsYourDoing(data);
});
我无法诊断为什么会发生这种情况。
答案 0 :(得分:4)
直接传递字符串?
function doWhateverItIsYoureDoing(xml) {
var data = "";
var startTag = "<table border='1' id='mainTable'><tbody><tr><td style=\"width: 120px\">Name</td><td style=\"width: 120px\">Link</td></tr>";
var endTag = "</tbody></table>";
$(xml).find('url').each(function() {
var $url = $(this);
var link = $url.find('link').text();
var name = $url.find('name').text();
data += '<tr><td>' + name + '</td>';
data += '<td>' + link + '</td></tr>';
});
$("#content").html(startTag + data + endTag);
}
你的.get可以改写为:
$.get('data.xml',doWhateverItIsYoureDoing );
如果你已经在字符串中有xml,那么
var data = "<?xml version=\"1......";
doWhateverItIsYoureDoing(data);
答案 1 :(得分:1)
只需将格式良好的XML字符串放入jQuery对象:
var xml = "<?xml version=\"1.0\"?><Dialog><Adam Emotion=\"strong\">I love you!</Adam><Eva Emotion=\"low\">I love you, too!</Eva></Dialog>";
使用
进行访问alert($(xml).find('Adam').text());
或
alert($(xml).find('Adam').attr('Emotion'));
答案 2 :(得分:1)
将XML字符串放入javascript变量
var xmlString = $(‘<?xml version=”1.0″?><Customers><Customer Name=”Allan Border” Age=”26″ ContactNumber=”004416165245″ Address=”Unit # 24 East London” City=”London” Country=”England”></Customer><Customer Name=”Jennifer” Age=”28″ ContactNumber=”004416165248″ Address=”Unit # 28 West London” City=”London” Country=”England”></Customer></Customers>’);
现在,您可以将XML解析为遍历每个客户节点......
$(xmlString).find("Customer").each(function () {
var customerName = $(this).attr("Name");
var age = $(this).attr("Age");
var contactNumber = $(this).attr("ContactNumber");
var address = $(this).attr("Address");
var city = $(this).attr("City");
var country = $(this).attr("Country");
});
答案 3 :(得分:1)
请注意,要正确解析任何类型的XML文件,您需要使用parseXML()
函数,如下所示:
var xml_jquery_object = jQuery.parseXML(xml);
当您按照其他答案中的说明执行操作时:
var html_jquery_object = jQuery(xml);
你要求jQuery解析HTML而不是XML。最大的区别是HTML删除了一些标签(body,html,head ...)并期望某些标签为空(br,hr,...)。因此,如果XML文件以某种方式包含此类标记,则可能会破坏XML文件的解析。
当然, xml
也可以是直接字符串。无论如何,AJAX .get()
函数都会向函数返回一个字符串。 (更好的.ajax()
函数可以直接返回XML对象。)因此,您可以在该变量中定义任何XML代码,如下所示:
xml = "<?xml version='1.0'?><test>...</test>";