# mm_xml **Repository Path**: qiuwenwu91/mm_xml ## Basic Information - **Project Name**: mm_xml - **Description**: No description available - **Primary Language**: NodeJS - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-02-17 - **Last Updated**: 2026-05-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # mm_xml 一个强大的XML序列化和反序列化模块,专为Koa框架设计。支持XML和JSON之间的相互转换,并提供了便捷的中间件功能。适用于微信公众号消息开发等需要xml传参的场景 ## 功能特点 - XML转JSON对象 - JSON对象转XML字符串 - Koa中间件支持 - 支持CDATA标签 - 自动类型转换(数字、布尔值、日期等) - 支持数组类型 - 错误处理机制 ## 安装 ```bash npm install mm_xml ``` ## 基本用法 ### 作为Koa中间件使用 ```javascript const Koa = require('koa'); const xml = require('mm_xml'); const app = new Koa(); // 使用默认配置 app.use(xml()); // 使用自定义配置 app.use(xml({ key: 'body', // 解析后的数据存储键名,默认为'body' limit: '4mb', // 请求体大小限制 encoding: 'utf8', // 编码格式 onerror: (err, ctx) => { // 错误处理函数 $.log.error(err); } })); ``` ### XML字符串转JSON对象 ```javascript // 示例XML字符串 const xml = ` 12345678 text `; // 转换为JSON对象 const jsonObj = xml.toXml(); $.log.debug(jsonObj); /* 输出结果: { ToUserName: 'toUser', FromUserName: 'fromUser', CreateTime: 12345678, MsgType: 'text', Content: '你好' } */ ``` ### JSON对象转XML字符串 ```javascript const toXml = require('mm_xml/xml-parser'); const obj = { ToUserName: 'toUser', FromUserName: 'fromUser', CreateTime: 12345678, MsgType: 'text', Content: '你好' }; const xmlString = toXml(obj); $.log.debug(xmlString); /* 输出结果: 12345678 */ ``` ## API参考 ### Koa中间件选项 | 参数 | 类型 | 默认值 | 说明 | |------|------|--------|------| | key | String | 'body' | 解析后的数据存储键名 | | limit | String | '4mb' | 请求体大小限制 | | encoding | String | 'utf8' | 编码格式 | | onerror | Function | - | 错误处理函数 | ### 类型转换规则 模块会自动进行以下类型转换: 1. 数字类型:符合数字格式的值会被转换为Number 2. 布尔类型:'true'和'false'会被转换为Boolean 3. 日期类型:符合日期格式的字符串会被转换为Date对象 4. 数组:重复的标签会被转换为数组 5. 字符串:其他类型会保持字符串格式,并使用CDATA包装 ### 特殊处理 1. CDATA标签: - XML转JSON时会自动去除CDATA标签 - JSON转XML时会自动为字符串类型添加CDATA标签 2. 数组处理: - 支持多层嵌套的数组结构 - 数组元素可以是简单类型或复杂对象 ## 完整示例 ```javascript require('mm_xml/xml-parser'); // 复杂XML示例 const xml = ` 12345678 2019-09-26 00:00:00 `; // 转换为JSON对象 const result = xml.toXml(); $.log.debug(result); /* 输出结果: { ToUserName: 'toUser', FromUserName: 'fromUser', CreateTime: 12345678, MsgType: { FromUserName: 'fromUser', CreateTime: [Date对象] }, Content: '你好' } */ ``` ## 注意事项 1. 中间件仅处理以下情况的请求: - HTTP方法为POST、PUT或PATCH - Content-Type包含'xml' - 请求体未被解析(ctx.request[bodyKey]未定义) 2. 响应处理: - 当响应体为对象且Content-Type包含'xml'时,会自动将对象转换为XML格式 3. 错误处理: - XML解析错误会抛出400状态码 - 可通过onerror选项自定义错误处理 ## 许可证 ISC License ## 作者 qww