# 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