使用jQuery在XML解析文件中选择正确的语言字段
问题描述:
我有一个XML文件,格式如下。使用jQuery在XML解析文件中选择正确的语言字段
<movies xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="movies.xsd">
<movie key="1">
<movieId>1</movieId>
<movieTitle>Alien</movieTitle>
<movieDate>1979</movieDate>
<movieUrl>http://www.imdb.com/title/tt0078748/</movieUrl>
</movie>
<movie key="2">
<movieId>2</movieId>
<movieTitle>Robocop</movieTitle>
<movieDate>1987</movieDate>
<movieUrl>http://www.imdb.com/title/tt0093870/</movieUrl>
</movie>
使用jQuery我能够循环通过这一点,并使用代码获取从影片的信息:
function parseXml(xml)
{
//find every movie
jQuery(xml).find("movie").each(function()
{
movieId = jQuery(this).find("movieId").text();
movieTitle= jQuery(this).find("movieTitle").text();
});
}
这一切工作完美,但我想补充一些多语言支持,但希望将所有语言都保存在同一个文件中,而不必担心所有地方的多个版本。所以我修改了XML的下面,注意在标题的新LANG =“PT”:
<movies xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="movies.xsd">
<movie key="1">
<movieId>1</movieId>
<movieTitle lang="en">Alien</movieTitle>
<movieTitle lang="pt">Alien - O 8.º Passageiro</movieTitle>
<movieDate>1979</movieDate>
<movieUrl>http://www.imdb.com/title/tt0078748/</movieUrl>
</movie>
<movie key="2">
<movieId>2</movieId>
<movieTitle lang="en">Robocop</movieTitle>
<movieTitle lang="pt">Robocop - O polícia do futuro</movieTitle>
<movieDate>1987</movieDate>
<movieUrl>http://www.imdb.com/title/tt0093870/</movieUrl>
</movie>
在我的代码,我设置语言的变种在Javascript如
<script>var languageCode = "pt";</script>
现在,当我循环播放电影时,我想使用此代码来确定要使用的标题,以及是否没有人回归标题,该标题始终存在。
我已经使用jQuery的过滤器,但也不太清楚它是如何工作的,例如试过这不起作用
movieNameObj = jQuery(this).find("movieTitle");
movieNameObj.filter(function() {
return jQuery(this).attr('lang:ro'); }).each(function() {
console.log("Matched RO");
});
更新
使用下面的代码,我得到它的工作但是,有没有什么办法可以优化它?
//find movieName in correct language
jQuery(this).find("movieTitle").each(function()
{
movieNameLang = jQuery(this).attr("lang");
if(movieNameLang == "en")
{
movieName = jQuery(this).text();
}
if(movieNameLang == languageCode)
{
movieName = jQuery(this).text();
}
});
答
最起码,您可以删除find
。
//find movieName in correct language
jQuery("movieTitle", this).each(function()
{
movieNameLang = jQuery(this).attr("lang");
if(movieNameLang == "en")
{
movieName = jQuery(this).text();
}
if(movieNameLang == languageCode)
{
movieName = jQuery(this).text();
}
});