@compare-xml/cli(JavaScript)
在终端对比 XML 文件或字符串,或通过 MCP 提供对比能力。
@compare-xml/cli 是一个用于对比 XML 文件或字符串的命令行工具和 MCP 服务器,基于 @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 替换为 npx @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
# 通过 stdio 启动 MCP 服务器
compare-xml --mcp
用法
compare-xml [base] [contrast] [options]
每个位置参数可以是内联 XML 或文件路径。如果参数解析为已存在的文件,CLI 会读取该文件;否则将参数本身作为 XML 解析。如果未提供两个输入且未设置 --mcp,CLI 会打印帮助。
参数
| 参数 | 说明 |
|---|---|
[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 | – | 通过 stdio 作为 MCP 服务器运行 | 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
# 无序——按多重集对比,保留重复项的出现次数
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
策略选择建议请参阅 XML 对比规则。
大小写不敏感对比
# 元素和属性名
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)—— 顶层值本身存在差异。
两个输入在当前选项下匹配时,输出为:
No differences found
JSON 格式
使用 -j / --json-export 时,CLI 会打印原始的 XMLValueDifference 对象数组。完整结构请参阅 @compare-xml/core。
MCP 服务器
CLI 还可以通过 MCP 向 AI 助手提供对比引擎:
# 全局安装后
compare-xml --mcp
# 或通过 npx
npx @compare-xml/cli --mcp
客户端配置和 compare_xml 参数说明请参阅 XML MCP 指南。
许可证
MIT