如何用SaxonJS与Node.js获取XML文件中的变量值
解决Node.js中SaxonJS获取XML属性的错误问题
错误原因
你用jsdom生成的DOM对象和SaxonJS的API不兼容,SaxonJS有自己的XML处理模型,不需要依赖jsdom来解析XML。
正确实现代码
方式一:直接加载XML文件
const saxonJs = require('saxon-js'); const fs = require('node:fs'); const xmlFilePath = './your-xml-file.xml'; // 替换为你的XML文件路径 // 使用SaxonJS自带的getResource加载XML SaxonJS.getResource({ file: xmlFilePath, type: 'xml' }).then(doc => { const xpathQuery = '//listener/@port'; const result = saxonJs.XPath.evaluate(xpathQuery, doc); console.log('Listener端口值:', result.value); // 输出55556 }).catch(err => { console.error('处理出错:', err); });
方式二:解析已读取的XML字符串
const saxonJs = require('saxon-js'); const fs = require('node:fs'); const xmlFilePath = './your-xml-file.xml'; const xmlContent = fs.readFileSync(xmlFilePath, 'utf8'); // 用SaxonJS解析XML字符串为兼容的文档对象 const doc = SaxonJS.parseXml(xmlContent); const xpathQuery = '//listener/@port'; const result = saxonJs.XPath.evaluate(xpathQuery, doc); console.log('Listener端口值:', result.value); // 输出55556
说明
- 两种方式都不需要引入jsdom,直接使用SaxonJS自带的XML解析能力,生成的文档对象能完美适配
SaxonJS.XPath.evaluate方法。 - 执行后会直接输出listener节点的port属性值
55556。
内容的提问来源于stack exchange,提问作者1Z3173C0D3
相关产品推荐
相关产品推荐

