使用jquery解析具有名称空间的xml文件

时间:2014-01-11 10:20:46

标签: javascript jquery xml-parsing

任何正文都可以帮助我使用jquery解析这个Xml File文件。此文件包含名称空间,我在解析此问题时遇到问题。

这是xml。

此XML文件似乎没有与之关联的任何样式信息。文档树如下所示。

<app:categories xmlns:app="http://www.w3.org/2007/app" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:yt="http://gdata.youtube.com/schemas/2007" fixed="no" scheme="http://gdata.youtube.com/schemas/2007/educategories.cat">
<atom:category term="0" label="Primary & Secondary Education" xml:lang="en-US"/>
<atom:category term="1" label="Fine Arts" xml:lang="en-US">
<yt:parentCategory term="0"/>
</atom:category>
<atom:category term="2" label="Dance" xml:lang="en-US">
<yt:parentCategory term="1"/>
</atom:category>
<atom:category term="3" label="Dramatic Arts & Theater" xml:lang="en-US">
<yt:parentCategory term="1"/>
</atom:category>
<atom:category term="4" label="Music" xml:lang="en-US">
<yt:parentCategory term="1"/>
</atom:category>
<atom:category term="405" label="Social Work" xml:lang="en-US">
<yt:parentCategory term="375"/>
</atom:category>
<atom:category term="406" label="Sociology" xml:lang="en-US">
<yt:parentCategory term="375"/>
</atom:category>
</app:categories>

1 个答案:

答案 0 :(得分:1)

您展示的是无效的XML。您必须将&替换为&amp;。有一些在线XML格式化程序站点,例如freeformatter.com,可能会帮助您获得有效的XML。

拥有有效的XML后,您可以使用XML解析器(例如$.parseXML函数)对其进行解析。

以下是如何检索所有类别标签的示例:

var xml = '<app:categories xmlns:app="http://www.w3.org/2007/app" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:yt="http://gdata.youtube.com/schemas/2007" fixed="no" scheme="http://gdata.youtube.com/schemas/2007/educategories.cat"><atom:category term="0" label="Primary &amp; Secondary Education" xml:lang="en-US"/><atom:category term="1" label="Fine Arts" xml:lang="en-US"><yt:parentCategory term="0"/></atom:category><atom:category term="2" label="Dance" xml:lang="en-US"><yt:parentCategory term="1"/></atom:category><atom:category term="3" label="Dramatic Arts &amp; Theater" xml:lang="en-US"><yt:parentCategory term="1"/></atom:category><atom:category term="4" label="Music" xml:lang="en-US"><yt:parentCategory term="1"/></atom:category><atom:category term="405" label="Social Work" xml:lang="en-US"><yt:parentCategory term="375"/></atom:category><atom:category term="406" label="Sociology" xml:lang="en-US"><yt:parentCategory term="375"/></atom:category></app:categories>';    
var data = $.parseXML(xml);
var categories = $(data).find('category');
$.each(categories, function() {
    var label = $(this).attr('label');
    console.log(label);
});

如果XML存储在您的服务器上,您需要首先使用AJAX检索它,然后只需找到您要查找的元素:

$.get('/file.xml', function(xml) {
    var categories = $(xml).find('category');
    $.each(categories, function() {
        var label = $(this).attr('label');
        console.log(label);
    });
}, 'xml');

请注意,在这种情况下,您不需要调用$.parseXML函数,因为jQuery会在调用AJAX成功回调之前自动为您调用它,它将直接提供解析后的XML。