@compare-xml/cli(JavaScript)
@compare-xml/cli 是一个命令行工具和 MCP 服务器,用于对比 XML 文件或字符串,基于 @compare-xml/core 构建。
语言:JavaScript/TypeScript —— 运行于 Node.js,通过 npm 分发。其它语言的实现可能会陆续推出。
安装
# npm
npm install -g @compare-xml/cli
# yarn
yarn global add @compare-xml/cli
# pnpm
pnpm add -g @compare-xml/cli
快速开始
# 查看帮助
compare-xml --help
# 对比两个 XML 字符串
compare-xml '<root><a>1</a></root>' '<root><a>2</a></root>'
# 对比两个 XML 文件
compare-xml file1.xml file2.xml
# 以 JSON 格式输出
compare-xml file1.xml file2.xml --json-export
# 将输出保存到文件
compare-xml file1.xml file2.xml -o output.txt
# 启动 MCP 服务器(stdio 传输)
compare-xml --mcp
用法
compare-xml [base] [contrast] [options]
每个位置参数可以是内联 XML 字符串,也可以是 XML 文件路径。CLI 会自动判断:如果参数解析为已存在的文件,则解析文件内容;否则将参数本身作为 XML 解析。如果 base 和 contrast 都未提供(且未设置 --mcp),则打印帮助信息。
参数
| 参数 | 说明 |
|---|---|
[base] | 基准 XML 字符串或文件路径 |
[contrast] | 对比 XML 字符串或文件路径 |
选项
| 选项 | 别名 | 说明 | 默认值 |
|---|---|---|---|
--array-compare-method <method> | -a | 数组对比方式:byIndex、lcs、unordered | byIndex |
--key-case-insensitive | -k | 键名(元素/属性名)大小写不敏感对比 | false |
--value-case-insensitive | -v | 值大小写不敏感对比 | false |
--json-export | -j | 以 JSON 格式输出 | false |
--output <file> | -o | 将输出写入文件而非标准输出 | – |
--mcp | – | 作为 MCP 服务器运行(stdio) | false |
--version | -V | 打印 CLI 版本 | – |
--help | -h | 打印帮助 | – |
示例
基础对比
compare-xml '<root><name>Alice</name><age>30</age></root>' '<root><name>Bob</name><age>30</age></root>'
输出:
┌──────────────────┬──────────────┐
│ Key │ Change Type │
├──────────────────┼──────────────┤
│ (Base) root.name │ valueChanged │
└──────────────────┴──────────────┘
数组对比方法
# 按索引(默认)
compare-xml '<root><items><item>1</item><item>2</item><item>3</item></items></root>' '<root><items><item>2</item><item>3</item><item>4</item></items></root>'
# LCS —— 有序数组的最小差异
compare-xml '<root><items><item>1</item><item>2</item><item>3</item></items></root>' '<root><items><item>2</item><item>3</item><item>4</item></items></root>' -a lcs
# Unordered —— 视为多重集合
compare-xml '<root><items><item>1</item><item>2</item><item>3</item></items></root>' '<root><items><item>3</item><item>2</item><item>1</item></items></root>' -a unordered
每种策略的说明请参阅数组对比方法。
大小写不敏感对比
# 键名忽略大小写
compare-xml '<root><Name>Alice</Name></root>' '<root><name>Alice</name></root>' -k
# 值忽略大小写
compare-xml '<root><status>OK</status></root>' '<root><status>ok</status></root>' -v
JSON 输出
compare-xml file1.xml file2.xml -j
输出:
[
{
"pathSegments": ["root", "name"],
"pathString": "root.name",
"pathBelongsTo": "both",
"diffType": "valueChanged"
}
]
保存到文件
# 保存表格格式
compare-xml file1.xml file2.xml -o diff.txt
# 保存 JSON 格式
compare-xml file1.xml file2.xml -j -o diff.json
设置 -o 后,CLI 会将格式化结果写入文件,并在标准输出打印 Output written to <path>。
输出格式
表格格式(默认)
Unicode 盒线表格。每行会标注路径所属的一侧:
(Base) <path>—— 路径存在于基准一侧(值变更、删除)。(Contrast) <path>—— 路径仅存在于对比一侧(新增)。(Root)—— 顶层值本身存在差异时使用。
┌───────────────────┬──────────────┐
│ Key │ Change Type │
├───────────────────┼──────────────┤
│ (Base) root.a │ valueChanged │
│ (Base) root.b │ deleted │
│ (Contrast) root.c │ added │
└───────────────────┴──────────────┘
当两个输入完全一致时,输出为:
No differences found
JSON 格式
使用 -j / --json-export 时,CLI 会打印原始的 XMLValueDifference 对象数组——完整结构请参阅 @compare-xml/core。
MCP 服务器
CLI 还内置了 MCP(Model Context Protocol)服务器,将对比引擎作为工具暴露给 AI 助手:
# 全局安装后
compare-xml --mcp
# 或通过 npx
npx @compare-xml/cli --mcp
客户端配置和 compare_xml 工具的参数说明请参阅 MCP 页面。
许可证
MIT