比较 Maven pom.xml 依赖变更
将旧的 pom.xml 粘贴到左侧,新版本粘贴到右侧,格式化两侧后即可看到新增、删除或版本更改的依赖项。传递性依赖关系通常会将单个版本升级变成数十行变更;diff 会精确定位更改的内容,而不会让您淹没在噪音中。
粘贴、格式化并并排比较两个 XML 文档。内置美化输出、验证和命名空间感知高亮。
一个免费的浏览器内工具,用于比较两个 XML 文档。将旧的 pom.xml 粘贴到左侧,新版本粘贴到右侧,变化会逐元素高亮显示。数据不会离开您的机器。
diff 本身是字符级的,验证通过浏览器原生的 DOMParser 进行。每个窗格上的格式化按钮会以一致的缩进重新排列您的 XML。实时验证在您输入时标记格式不正确的标记、不匹配的标签和损坏的实体引用。
如果您曾在代码审查中打开一个 4000 行的 Spring 应用程序上下文,试图找出 class 属性发生变化的那个 bean,这个工具能在几秒内帮您定位。对于纯文本,我们的文本 diff 工具是更好的选择。对于带有键值对的结构化数据,JSON diff 处理对象重排比 XML 更干净。
diff 在字符级别运行,然后通过语义后处理清理,使高亮落在有意义的标记块上,而不是随机字节上。插入内容在右侧窗格以绿色显示,删除内容在左侧以红色显示。
XML 的一个重要特点是,命名空间会影响元素相等性,但不影响文本表示。<ns1:book> 和 <ns2:book> 如果两个前缀绑定到同一个 URI,则是相同的元素,但 diff 会将它们标记为不同。在比较前格式化两侧以规范化前缀分配。
属性顺序在 XML 中也是未定义的,这与 JSON 键顺序类似。W3C XML 1.0 规范规定属性是无序的集合,所以 <a x="1" y="2"/> 和 <a y="2" x="1"/> 是相同的元素。文本 diff 仍会标记重排,这就是为什么格式化按钮很重要。
两个文本窗格,一个 diff。无需注册,无需上传,无需服务器往返。
将旧 XML 粘贴到左侧,新 XML 粘贴到右侧。或者点击任意一侧的上传直接加载 .xml、.pom 或 .svg 文件。如果想先看工具效果,点击示例按钮,两个窗格都会填充一个小示例。
点击每个窗格上的格式化,以两空格缩进进行美化输出。这会规范化空白和行尾,使 diff 只高亮显示实际标记变化。格式化也会展开单行压缩的 XML,方便阅读。
删除的标记在左侧以红色高亮显示,插入的标记在右侧以绿色高亮显示。滚动任意一侧,另一侧随之跟随。每个标题中的变更计数会告诉您 diff 找到了多少个不同的编辑。
将旧的 pom.xml 粘贴到左侧,新版本粘贴到右侧,格式化两侧后即可看到新增、删除或版本更改的依赖项。传递性依赖关系通常会将单个版本升级变成数十行变更;diff 会精确定位更改的内容,而不会让您淹没在噪音中。
大型 Spring XML 配置文件在代码审查中很难阅读。在此并排 diff 两个版本,查看哪些 bean 被添加、删除或重新接线,而无需在 4000 行的上下文文件中手动搜索。
WSDL 文件和 XSD schema 嵌套很深,即使是微小的类型更改也会在 GitHub PR 中显示为大量行变化,因为工具会重新格式化整个文件。将两个版本粘贴到这里,格式化,真正的变更,如新增的 <xs:element> 或修改的 minOccurs,便会立即突出显示。
如果您定期抓取 XML feed,diff 工具可以快速显示哪些条目是新的,哪些已被修改,以及元数据是否发生了变化,例如 <pubDate> 或 <link>。这比用肉眼扫描 XML 要快得多。
在 XSLT 转换之前和之后粘贴 XML,以验证转换是否按预期工作。这对于调试复杂的 XSLT 模板特别有用,在这些情况下,转换逻辑可能很难推理。
将两个版本的 AndroidManifest.xml 或 strings.xml 粘贴进来,查看权限或字符串是否发生了变化。在大型 Android 项目中,这些文件往往会无声地发生变化,当权限集合不同步时,会在应用审查期间引发问题。
关于此工具最常暴露的 XML 解析边缘情况的简短速查表。所有内容均基于 W3C XML 规范。
| Topic | What this tool does |
|---|---|
| 格式良好 vs 有效 | 格式良好意味着标签正确嵌套,有一个根元素,属性值加引号。有效意味着还符合 DTD 或 XSD。此工具检查格式良好性;对于完整的 schema 验证,请使用 xmllint。 |
| 属性顺序 | 规范规定无序。<a x="1" y="2"/> 等于 <a y="2" x="1"/>。文本 diff 仍会标记重排;在 diff 前格式化两侧以规范化顺序。 |
| 命名空间 | xmlns:ns="uri" 将前缀 ns 绑定到 URI。前缀是任意的;重要的是 URI。不同前缀相同 URI 的元素在语义上是相同的,但文本 diff 会将其标记为不同。 |
| CDATA 节 | 用 <![CDATA[ ... ]]> 包裹的字面文本。解析器不解析其中的标签或实体。序列 ]]> 不能出现在 CDATA 块内。 |
| 混合内容 | 元素可以以任意顺序包含文本、子元素和空白。<p>你好 <b>世界</b>!</p> 是混合内容,其中的空白是有意义的。 |
| 注释 | <!-- 注释 -->。内部不能包含 --。大多数处理器会丢弃注释,但在此 diff 中保留为文本。 |
| 编码与 BOM | 通过 <?xml version="1.0" encoding="UTF-8"?> 声明。UTF-8 BOM 是一个隐藏的首字符;是第 1 行出现单字符幽灵 diff 的常见原因。 |
| XML 1.0 vs 1.1 | 几乎所有人都使用 XML 1.0。1.1 版本增加了对元素内容中更多 Unicode 控制字符的支持;在实践中很少见。 |
| 实体引用 | 五个内置实体:& < > ' "。带重音字母的数字字符引用如 é 也是有效的。自闭合 <br/> 和显式 <br></br> 等价。 |
不会。diff 完全在您的浏览器中运行。没有任何内容被发送到服务器、记录或存储。粘贴内部配置或私有 schema 后关闭标签页,不会留下任何副本。打开 DevTools 并查看网络标签,在比较时没有出站请求。
如果两侧的属性顺序不同,文本 diff 会将其标记为变更,即使 XML 规范规定属性是无序的。格式化两侧后,格式化器会以一致的顺序输出属性,最小化这种虚假差异。对于精确的语义等价性检查,您需要一个结构感知的 XML 差异工具。
diff 是文本级别的,所以它看到的是字符,而不是解析后的命名空间。ns1:book 和 ns2:book 即使绑定到相同的 URI,也会显示为不同。在 diff 前格式化两侧,以便规范化格式化器选择的前缀。
可以。点击任意窗格上的上传,从磁盘直接选择 .xml 文件,无需复制粘贴。文件在浏览器中本地读取,永远不会发送到任何地方。点击两侧的格式化,diff 会忽略空白,只显示标记中真正发生变化的部分。
免费,无需注册。没有账户,没有试用期,比较次数也没有限制。粘贴两个 XML 片段,diff 立即出现。没有任何功能藏在登录后面,复制和下载按钮会给您干净的输出,没有水印。
可以。先在两侧都点击格式化,格式化器会将单行 XML 扩展为正确缩进的多行格式。之后再进行 diff,高亮显示的是实际的标记变化,而不是缩进差异。对于超大文件,在格式化和 diff 之前先使用 xmllint --format 在命令行处理可能会更快。
比较完全在您的浏览器中运行,所以您的 XML 永远不会被上传。许多在线 XML diff 网站会先将内容发送到服务器,这在处理私有 schema 或包含敏感数据的配置文件时是不可接受的。高亮是字符级的,带有语义清理,还内置了格式化、验证和文件上传功能。
不能在一个视图中。工具为两侧设计:原始版和修改版。如果您有三个版本需要比较,请两两进行:先比较版本 A 和版本 B,再比较版本 B 和版本 C,每次对比都能给出干净的结果。
您的 XML 永远不会离开您的浏览器。解析器、格式化器和 diff 都在您的机器上本地运行。没有对您输入的分析,没有日志,没有"贴心的"云端往返。解析和验证使用浏览器原生的 DOMParser,我们遵循的规范是 W3C XML 1.0。关于此格式的背景信息可在 维基百科上找到。