在使用Cheerio.js解析XML时,如何查看特定部分中是否存在标记?

时间:2018-04-19 23:44:42

标签: javascript xml cheerio

我一直在使用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>

1 个答案:

答案 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);
});