使用GatewayScript提取给定XML请求中的最新更新日期
GatewayScript提取XML最新更新日期实现方案
以下是示例入站XML请求,我需要遍历所有日期,使用GatewayScript提取最新的更新日期输出。
<rsp:response xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rsp="rsp.com/employee/Response/v30" xmlns:res="res.com/Member/details/v1"> <rsp:period> <res:Period> <rsp:date>2020-07-06T19:38:39</rsp:date> </res:Period> </rsp:period> <rsp:period> <res:Period> <rsp:date>2020-08-07T20:38:39</rsp:date> </res:Period> </rsp:period> <rsp:period> <res:Period> <rsp:date>2020-05-06T19:18:39</rsp:date> </res:Period> </rsp:period> </rsp:response>
完整实现代码
// 引入XML处理依赖模块 const dom = require('xmldom'); const xpath = require('xpath'); // 实际DataPower场景可通过session.input.readAsXML()直接获取解析后的DOM对象,无需手动解析字符串 const xmlStr = `上述示例XML内容`; const doc = new dom.DOMParser().parseFromString(xmlStr); // 注册命名空间解析器,和XML中的前缀一一对应 const nsResolver = prefix => { const nsMap = { 'rsp': 'rsp.com/employee/Response/v30', 'res': 'res.com/Member/details/v1' }; return nsMap[prefix] || null; }; // 用XPath查询所有日期节点 const dateNodes = xpath.select('//rsp:date/text()', doc, nsResolver); // 遍历比对获取最新日期 let latestDate = new Date(0); dateNodes.forEach(node => { const currentDate = new Date(node.nodeValue); if (currentDate > latestDate) latestDate = currentDate; }); // 输出和原格式一致的日期结果 console.log(latestDate.toISOString().slice(0, 19)); // 示例输出:2020-08-07T20:38:39
注意事项
- 命名空间必须和入站XML完全匹配,否则XPath会无法匹配到对应节点
- 示例中的日期为ISO 8601标准格式,可直接传入Date对象比对大小,无需额外格式转换
- 生产环境建议增加节点存在性、日期格式合法性校验逻辑,避免运行报错
内容的提问来源于stack exchange,提问作者Sri
相关产品推荐
相关产品推荐

