如何使用 Node js 获取 XML 的属性值?
How can I get an attribute value of an XML using Node js?
我正在使用 Node js 开发一个小项目,我必须在其中访问 Musicbrainz API 并从中获取一些数据。
问题是我正在尝试使用 URL 从 API 获取值,然后获取结果页面的 XML 版本并最终获取该值我想(这是“计数”)使用节点 js (https://www.npmjs.com/package/xmldom) 的 XMLDOM 包。
XML 看起来像这样,我想得到计数的值(红色下划线):
这是我用来获取值的函数:
// 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 && 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') 不工作,因为它抛出 UnhandledPromiseRejectionWarning: TypeError: x.getAttribute is not a function。这怎么可能,因为我安装了 XMLDOM 包并且函数 getAttribute 存在?我用错了吗?是否有另一种获取“计数”值的方法?
谢谢!
document.getElementsByTagName
returns 一个节点列表,因此 x[0]
可能是一个元素节点,如果找到元素,您可以为其调用 getAttribute
。在 W3C DOM APIs 的世界里,我认为使用 getElementsByTagNameNS
会更安全,因为你的元素在命名空间中,但我不知道 Node.js API 告诉你是否需要它。
我正在使用 Node js 开发一个小项目,我必须在其中访问 Musicbrainz API 并从中获取一些数据。
问题是我正在尝试使用 URL 从 API 获取值,然后获取结果页面的 XML 版本并最终获取该值我想(这是“计数”)使用节点 js (https://www.npmjs.com/package/xmldom) 的 XMLDOM 包。
XML 看起来像这样,我想得到计数的值(红色下划线):
这是我用来获取值的函数:
// 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 && 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') 不工作,因为它抛出 UnhandledPromiseRejectionWarning: TypeError: x.getAttribute is not a function。这怎么可能,因为我安装了 XMLDOM 包并且函数 getAttribute 存在?我用错了吗?是否有另一种获取“计数”值的方法?
谢谢!
document.getElementsByTagName
returns 一个节点列表,因此 x[0]
可能是一个元素节点,如果找到元素,您可以为其调用 getAttribute
。在 W3C DOM APIs 的世界里,我认为使用 getElementsByTagNameNS
会更安全,因为你的元素在命名空间中,但我不知道 Node.js API 告诉你是否需要它。