如何使用JavaScript(Node.js)提取文档中number标签内容
Node.js 提取XML响应中number字段值实现方案
待解析的响应为标准XML格式的短信网关返回结果,Node.js环境下可根据场景选择以下两种实现方式:
方案1:零依赖正则提取(简单场景适用)
如果响应结构固定、仅需要提取单个固定字段,不需要引入第三方依赖,直接用正则匹配即可:
// 原始接口响应字符串 const rawXml = `<Response> <SMSMessageData> <Message>Sent to 1/1 Total Cost: NGN 2.2000</Message> <Recipients> <Recipient> <number>+9109929199111</number> <cost>NGN 2.2000</cost> <status>Success</status> <statusCode>101</statusCode> <messageId>ATXid_f615eb5c6e901459e52d67d045a55355</messageId> <messageParts>1</messageParts> </Recipient> </Recipients> </SMSMessageData> </Response>`; // 匹配<number>标签包裹的内容 const matchResult = rawXml.match(/<number>([\s\S]*?)<\/number>/); const phoneNumber = matchResult ? matchResult[1].trim() : null; console.log(phoneNumber); // 输出 +9109929199111
注意:正则方案容错性较差,如果XML存在嵌套同名标签、标签带属性、特殊转义字符时可能匹配错误,仅适合临时简单场景使用。
方案2:XML解析库结构化提取(生产环境推荐)
如果后续需要提取其他字段、响应结构可能调整,使用专门的XML解析库将XML转换为JS对象后再取值,稳定性和可维护性更高。
- 安装轻量解析依赖
npm install fast-xml-parser
- 解析代码实现
const { XMLParser } = require('fast-xml-parser'); // 原始接口响应字符串 const rawXml = `<Response> <SMSMessageData> <Message>Sent to 1/1 Total Cost: NGN 2.2000</Message> <Recipients> <Recipient> <number>+9109929199111</number> <cost>NGN 2.2000</cost> <status>Success</status> <statusCode>101</statusCode> <messageId>ATXid_f615eb5c6e901459e52d67d045a55355</messageId> <messageParts>1</messageParts> </Recipient> </Recipients> </SMSMessageData> </Response>`; // 初始化解析器,可按需传入配置项 const xmlParser = new XMLParser(); // 转换为JS对象 const parsedData = xmlParser.parse(rawXml); // 按层级路径直接取值 const phoneNumber = parsedData.Response.SMSMessageData.Recipients.Recipient.number; console.log(phoneNumber); // 输出 +9109929199111 // 其他字段也可直接读取,例如: // const sendStatus = parsedData.Response.SMSMessageData.Recipients.Recipient.status // const msgCost = parsedData.Response.SMSMessageData.Recipients.Recipient.cost
该方案的优势:
- 兼容标准XML所有语法,支持标签属性、转义字符、嵌套节点等场景,容错性强
- 解析后为普通JS对象,可直接读取任意层级字段,后续需求调整不需要重写匹配逻辑
- 依赖包体积小,无额外原生依赖,Node.js全版本兼容
内容的提问来源于stack exchange,提问作者Okafor Zuruoke
相关产品推荐
相关产品推荐

