我一直在使用Cheerio.js解析XML,而且我遇到的问题是什么时候作者没有“ee”标签,因为它会将下一个可见的“ee”标签应用于它,从而产生一个标题链接不匹配。
我的问题是,我如何确保仅为该标题存在“ee”标记(因此在该特定的“info”或“hit”标记内),如果它不存在,请使用“url”标记相反(或指定一个死链接)?
下面是我一直在使用的Javascript代码,后面是XML。第一个条目有一个“ee”标签,而第二个条目只有一个“url”标签。
$('info').each(function(i, element) {
var title = $('title').eq(i).text();
var year = Number($('year').eq(i).text());
if ($('ee').eq(i).length)
var url = $('ee').eq(i).text();
//Within this condition we can add each string to their respective cell
if (year >= q.tenure) {
//add entry to homepageII, authorFilter, & titleFilter
homepage("#"+year).append("<tr><td><a href="+url+">"+title+"</a>").text();
authorFilter("#"+q.tag).append("<tr><td><a href="+url+">"+title+"</a>").text();
titleFilter("#titles").append("<tr><td><a href="+url+">"+title+"</a>").text();
console.log(title);
console.log(year);
console.log(url + '\n');
}
});
<hit score="1" id="111111">
<info>
<authors>
<author>Not Real Name</author>
<author>Not Real Name</author>
<author>Not Real Name</author>
</authors>
<title>
Not Real Name
</title>
<venue>Not Real Name</venue>
<volume>21</volume>
<number>3</number>
<pages>151-159</pages>
<year>2014</year>
<type>Journal Articles</type>
<key>Not Real Name</key>
<ee>The link I usually use</ee>
<url>alternative link I could use</url>
</info>
<url>URL#111111</url>
</hit>
<hit score="1" id="1111111">
<info>
<authors>
<author>Not Real Name</author>
<author>Not Real Name</author>
<author>Not Real Name</author>
<author>Not Real Name</author>
<author>Not Real Name</author>
</authors>
<title>
Not Real Name
</title>
<venue>Not Real Name</venue>
<volume>20</volume>
<number>4</number>
<pages>208-220</pages>
<year>2013</year>
<type>Journal Articles</type>
<key>Not Real Name</key>
<url>alt link I could use, no ee above</url>
</info>
<url>URL#11111111</url>
</hit>
答案 0 :(得分:0)
而不是尝试将所选标记<title>
<year>
<ee>
与&#34; parallel&#34;中的索引进行匹配。数组(即使用.eq(i).
技巧,您应该更好地从每个<hit> <info>
标记内部提取有趣的标记。
与......类似的东西。
let $infos = $('hit info');
$infos.each(function(i, element) {
let $info = $(element);
let title = $info.find('title').text().trim();
let year = Number($info.find('year').text());
然后您可以轻松检查个人'<hit> <info>'
内是否有<ee>
标记
let ee = $info.find('ee').text();
let url = ee ? ee : $info.find('url').text();
console.log(i,title,year,url);
});