node js cheerio xml

时间:2014-07-29 09:58:28

标签: node.js cheerio

我有以下代码,它可以正常工作:

<troveUrl>http://trove.nla.gov.au/work/23043869</troveUrl> 

但是我想从同一页面获取以下'id'之后的值并且无法得到它!

<work id="23043869" url="/work/23043869">

这是我目前拥有的代码

var request = require ('request'),
    cheerio = require ('cheerio');
    request('http://api.trove.nla.gov.au/result?key=6k6oagt6ott4ohno&zone=book&q-year1-date=2000&l-advformat=Thesis&l-australian=y&q-term2=&q-term3=&q-term0=&q-field1=title%3A&q-type2=all&q-field0=&q-term1=&q-type3=all&q-field3=subject%3A&q-type0=all&q-field2=creator%3A&q-type1=all&l-availability=y%2Ff&q=+date%3A[2000+TO+2014]&q-year2-date=2014&n=1', function (error, response, html) {
      if (!error && response.statusCode == 200) {
        var $ = cheerio.load(html);
        $('troveurl').each(function(i, element){
          var id = $(this);
          console.log(id.text());
        });
      }
    });

任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:13)

您应该在options对象中传递xmlMode: true,然后您可以将其解析为XML。

然后,您可以使用$('tag').attr('attribute')$('tag').text()获取标记和数据,以便在您完成标记之间获取数据。

var request = require('request'),
    cheerio = require('cheerio');
request('http://api.trove.nla.gov.au/result?key=6k6oagt6ott4ohno&zone=book&q-year1-date=2000&l-advformat=Thesis&l-australian=y&q-term2=&q-term3=&q-term0=&q-field1=title%3A&q-type2=all&q-field0=&q-term1=&q-type3=all&q-field3=subject%3A&q-type0=all&q-field2=creator%3A&q-type1=all&l-availability=y%2Ff&q=+date%3A[2000+TO+2014]&q-year2-date=2014&n=1', function(error, response, html) {
    if (!error && response.statusCode == 200) {
        var $ = cheerio.load(html, {
          xmlMode: true
        });
        console.log($('work').attr('id'))
    }
});

答案 1 :(得分:0)

真正的问题在于您用来获取'id'之后的值的语法。以下代码不会console.log ID退出。

docker rmi --force $(docker images -q --filter "dangling=true")

正确的语法应为var id = $(this); console.log(id.text()); ,就像上面Ben Fortune的答案中提到的那样。但是,不必在选项对象中传递$('your element').attr('id')。 如果使用正确的语法,则在选项中传递xmlMode: true也将起作用。