注意:我最近发布了another question,但它被标记为重复,因为我没有详细说明我已经尝试过的内容。我会试着解释一下这次我做得更好。
这是我正在尝试解析的XML文件的一部分:
<entry>
<id>http://www.google.com/m8/feeds/contacts/7ff84d8009d9a0b</id>
<updated>2010-04-11T12:47:03.281Z</updated>
<category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/contact/2008#contact'/>
<title type='text'>Name</title>
<link rel='http://schemas.google.com/contacts/2008/rel#edit-photo' type='image/*' href='https://www.google.com/m8/feeds/photos/media/7ff84d8009d9a0b/1B2M2Y8AsgTpgAm7PhCfg'/>
<link rel='self' type='application/atom+xml' href='https://www.google.com/m8/feeds/contacts/full/7ff84d8009d9a0b'/>
<link rel='edit' type='application/atom+xml' href='https://www.google.com/m8/feeds/contacts/full/7ff84d8009d9a0b/127099002381000'/>
<gd:email rel='http://schemas.google.com/g/2005#other' address='email@email.com' primary='true'/>
</entry>
这是我的JavaScript代码:
$("#importData").append("<ul>");
xmlDoc = $.parseXML(data);
$xml = $(xmlDoc);
$xml.find('entry').each(function () {
var name = $(this).find("title").text();
var email = $(this).find('[nodeName="gd:email"]').attr('address');
$("#importData").append("<li>" + name + " - " + email + "</li>");
});
//$(this).text() + " - " + $xml.find("gd:email[address]").index(i)
$("#importData").append("</ul>");
这是一个尝试(不成功)解析XML的jsfiddle:http://jsfiddle.net/DVXB9/4/
这是另一个jsfiddle成功解析XML,gd:email
替换为gdemail
(无冒号):http://jsfiddle.net/DVXB9/5/
我尝试了各种方法来解析我的XML与命名空间,包括[nodeName=gd:email]
,[nodeName="gd:email"]
和gd\\:email
,这些都是this StackOverflow问题所建议的。 但是,他们都没有成功。
我不知道接下来应该怎么做。其他XML结构与我相似的人声称上述方法可以正常工作。但是,我得到的最好的是输出值“undefined”。我做错了什么?
答案 0 :(得分:2)
此处已更新Fiddle
为了让您的示例正常工作,我必须添加名称空间声明<entry xmlns:gd='http://www.some-url.org'>
,否则$.parseXML
抛出异常......之后您可以使用$('gd\\:email, email',$xml)
来访问电子邮件节点。