#node.js #xml #xmldom
Вопрос:
Я работаю над небольшим проектом с использованием Node js, в котором мне нужно получить доступ к API Musicbrainz и получить из него некоторые данные.
Дело в том, что я пытаюсь получить значение из API, используя URL-адрес, затем получаю XML-версию результирующей страницы и, наконец, получаю желаемое значение («количество»), используя пакет XMLDOM для node js (https://www.npmjs.com/package/xmldom).
XML выглядит так, и я хочу получить значение count (подчеркнуто красным).:
Это функция, которую я использую для получения значения:
// Loading of necessary modules and creation of a new application.
var express = require("express");
var app = express();
var request = require("request");
var DOMParser = new (require('xmldom')).DOMParser;
// URL of the musicbrainz API.
var root_url = "https://musicbrainz.org/ws/2/";
// Example: MBID = 0da580f2-6768-498f-af9d-2becaddf15e0
function getReleases(MBID){
var releases_URL = root_url "release-group/" MBID "?inc=releases"
var count
request({
headers: {
'User-Agent': 'my-musicbrainz-client',
},
url: releases_URL,
json: false
}, async function (error, response, body) {
if (!error amp;amp; response.statusCode === 200) {
var document = DOMParser.parseFromString(body);
var x = document.getElementsByTagName("release-list")
console.log("Release list = " x)
count = x.getAttribute('count')
console.log("COUNT:" y)
return count
}else{
console.log("ERROR IN FUNCTION")
}
})
}
Но проблема в том, что count = x.getAttribute («count») не работает, так как он выбрасывает необработанный Promiserejectionwarning: ошибка типа: x.getAttribute не является функцией. Как это возможно, если я установил пакет XMLDOM и атрибут функции getAttribute существует? Я неправильно его использую? Есть ли другой способ получить значение «подсчета»?
Спасибо!
Ответ №1:
document.getElementsByTagName
возвращает список узлов, поэтому x[0]
может быть узлом элемента, для которого вы можете вызвать getAttribute
, если элементы найдены. В мире API-интерфейсов W3C DOM я думаю, что было бы безопаснее использовать getElementsByTagNameNS
, поскольку ваши элементы находятся в пространстве имен, но я не знаю, что Node.js API, чтобы сказать, нужно ли вам это там.
Комментарии:
1. Спасибо! Это полностью решило проблему!