You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js使用xmldom获取XML属性值时报getAttribute不是函数如何解决

问题原因及解决方案

报错根因

document.getElementsByTagName("release-list") 返回的是符合匹配规则的元素集合(类数组结构),不是单个DOM元素,因此没有getAttribute方法,直接调用会抛出类型错误。

代码修复

你只需要从返回的集合中取出第一个匹配元素,再调用属性读取方法即可,同时修正代码中其他已知问题:

// 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/";

// 建议把异步操作封装为Promise,方便外部调用取值
function getReleases(MBID){
  return new Promise((resolve, reject) => {
    const releases_URL = root_url + "release-group/" + MBID + "?inc=releases"
    request({
      headers: {
          'User-Agent': 'my-musicbrainz-client',
      },
      url: releases_URL,
      json: false
    }, function (error, response, body) {
        if (!error && response.statusCode === 200) {
            const document = DOMParser.parseFromString(body);
            // 取出集合中第一个匹配的元素
            const releaseList = document.getElementsByTagName("release-list")[0]
            const count = releaseList.getAttribute('count')  
            console.log("COUNT:"+ count)                                                                 
            resolve(count)
        }else{
            console.log("ERROR IN FUNCTION")
            reject(error || new Error('请求失败'))
        }
    })
  })
}

// 外部调用示例
// getReleases('0da580f2-6768-498f-af9d-2becaddf15e0').then(count => console.log('拿到的count值:', count))

其他获取属性的方式

  • 可以使用xml2js包直接把XML整体转为JSON对象,直接读取嵌套属性即可,不用操作DOM,更适合简单场景的属性提取
  • 也可以使用xpath语法直接定位元素,精准度更高,适合XML结构复杂的场景

内容的提问来源于stack exchange,提问作者Lorena A.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 15:27:01