Как я могу получить значение атрибута XML с помощью узла js?

#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. Спасибо! Это полностью решило проблему!