узел js приветствие xml

У меня есть приведенный ниже код, и он отлично работает, чтобы получить:

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

Любая помощь приветствуется.


person user1222447    schedule 29.07.2014    source источник
comment
console.log(element.attr('id')); работать?   -  person laggingreflex    schedule 29.07.2014


Ответы (2)


Вы должны передать 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'))
    }
});
person Ben Fortune    schedule 29.07.2014
comment
Спасибо! Идеальный ответ - я узнал кое-что, чего просто не смог найти в Google. - person user1222447; 29.07.2014
comment
@user1222447 user1222447 в следующий раз вы сможете отследить его, выполнив поиск ожидаемых комментариев или ожидаемых терминов в исходных кодах (а не в полнотекстовых вопросах, предлагаемых Google). например поиск термина xml в базе кода cheerio github.com/cheeriojs/cheerio/search ?q=xml&type=Code показывает, что на поведение влияет некоторая xmlMode переменная. Одного этого недостаточно, но я думаю, это то, что Бен использовал либо в этот раз, либо некоторое время назад. - person xmojmr; 30.07.2014
comment
Если вы передадите xmlMode: true коду, код все равно должен работать. - person Jun Yin; 10.03.2020

Настоящая проблема заключается в синтаксисе, который вы использовали для получения значения после «id». Следующий код не будет выводить идентификатор в console.log.

var id = $(this);
console.log(id.text());

Правильный синтаксис должен быть $('your element').attr('id'), как указано в ответе Бена Форчуна выше. Однако передача xmlMode: true в объект опций не является обязательной. Передача xmlMode: false в параметрах также будет работать, если вы используете правильный синтаксис.

person Jun Yin    schedule 11.03.2020