使用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(); 
    } 
});