@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、unorderedbyIndex
--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