@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 解析。如果 basecontrast 都未提供(且未设置 --mcp),则打印帮助信息。

参数

参数说明
[base]基准 XML 字符串或文件路径
[contrast]对比 XML 字符串或文件路径

选项

选项别名说明默认值
--array-compare-method <method>-a数组对比方式:byIndexlcsunorderedbyIndex
--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