Express服务器中解析XML后将SubClass转为code数组的方法
嘿,我之前也遇到过express-xml-bodyparser解析后结构太绕的问题,刚好有两种实用的方法可以帮你拿到想要的纯code数组!
解决方法
方法一:解析时配置参数(推荐长期使用)
express-xml-bodyparser底层依赖的是xml2js库,咱们可以通过传递xml2js的配置选项,让解析结果直接更贴近需求。
比如可以把属性的默认键名$换掉,甚至直接把属性合并到父对象里,后续提取就方便多了:
const express = require('express'); const xmlParser = require('express-xml-bodyparser'); const app = express(); // 配置XML解析器的自定义选项 app.use(xmlParser({ xml2jsOptions: { mergeAttrs: true, // 把标签属性直接合并到对象中,不再嵌套在$里 explicitArray: true // 强制多个同名标签解析为数组,避免单个标签时变成对象 } })); // 在路由里处理请求 app.post('/your-api-path', (req, res) => { // 现在每个subclass元素直接带code属性 const subclassCodes = req.body.subclass.map(item => item.code); console.log(subclassCodes); // 输出:['A07.0','A07.1','A07.2','A07.3','A07.8','A07.9'] // 后续业务逻辑... res.send(subclassCodes); });
方法二:解析后快速转换(适合临时场景)
如果不想改动全局的解析配置,直接对拿到的结果做数组映射就行,一行代码就能搞定:
app.post('/your-api-path', (req, res) => { // 从每个嵌套的$对象里提取code值 const subclassCodes = req.body.subclass.map(item => item.$.code); console.log(subclassCodes); // 就是你想要的数组格式 // 后续处理... });
额外的安全处理(可选)
如果你的XML可能出现只有一个<SubClass>标签的情况,解析出来的subclass会是单个对象而不是数组,这时候可以加个小判断兼容:
const getSubclassCodes = (parsedData) => { // 先确保subclass是数组,避免单个元素时出错 const subclassItems = Array.isArray(parsedData.subclass) ? parsedData.subclass : [parsedData.subclass]; // 提取code,同时处理可能的undefined情况 return subclassItems.map(item => item?.$.code || ''); }; // 使用示例 const codes = getSubclassCodes(req.body);
这样不管是单个还是多个SubClass标签,都能稳定输出数组格式。
内容的提问来源于stack exchange,提问作者nEkis
相关产品推荐
相关产品推荐

