使用xml2js处理带属性的XML时遇语法错误,求解决方案
XML添加属性后出现语法错误的解决方法
我是JavaScript和Node.js新手,需要将XML文件中的数据存入数据库。尝试使用xml2js包,无属性的XML解析代码可正常运行:
var parseString = require('xml2js').parseString; const options = { explicitArray: false }; var xml = "<root><level1>Hello xml2js!</level1><level2>How are things?</level2></root>" parseString(xml, options, function (err, result) { console.dir(result); });
输出结果符合预期:{ root: { level1: 'Hello xml2js!', level2: 'How are things?' } }
但添加属性后,例如使用var xml = "<root><level1 id="1">Hello xml2js!</level1><level2>How are things?</level2></root>"时出现语法错误,错误信息如下:
var xml = "<root><level1 id="1">Hello xml2js!</level1><level2>How are things?</level2></root>" ^ SyntaxError: Unexpected number at Object.compileFunction (node:vm:360:18) at wrapSafe (node:internal/modules/cjs/loader:1088:15) at Module._compile (node:internal/modules/cjs/loader:1123:27) at Module._extensions..js (node:internal/modules/cjs/loader:1213:10) at Module.load (node:internal/modules/cjs/loader:1037:32) at Module._load (node:internal/modules/cjs/loader:878:12) at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:82:12) at node:internal/main/run_main_module:23:47 Node.js v19.0.1
问题原因及解决方法
这是字符串引号冲突导致的语法错误:你用双引号包裹整个XML字符串,而XML标签里的属性值也用了双引号(id="1"),JavaScript会把第一个"之后的内容当成字符串外的代码,从而触发语法错误。
解决方法有三种:
- 用单引号包裹整个XML字符串,内部属性保留双引号:
var xml = '<root><level1 id="1">Hello xml2js!</level1><level2>How are things?</level2></root>' - 转义XML字符串内部的双引号,在每个内部
"前加反斜杠\:var xml = "<root><level1 id=\"1\">Hello xml2js!</level1><level2>How are things?</level2></root>" - 使用ES6模板字符串(反引号
`)包裹XML,内部可直接使用双引号:var xml = `<root><level1 id="1">Hello xml2js!</level1><level2>How are things?</level2></root>`
任选一种修改后,代码即可正常解析带属性的XML。
内容的提问来源于stack exchange,提问作者zukato
相关产品推荐
相关产品推荐

