golang命令行XML比较与差异生成插件XML-Comp的使用

Golang命令行XML比较与差异生成插件XML-Comp的使用

什么是XML-Comp

这是一个命令行工具和包的组合,提供了比较两个目录并在文件中追加目录间差异的功能,同时还会创建可能缺失的文件或文件夹。它旨在帮助RimWorld社区翻译者了解XML更新中的修改内容,并让他们跟踪需要添加/删除的内容。

特性

  • [x] 比较两个给定目录
  • [x] 将缺失的标签追加到相应文件
  • [x] 在被比较目录中创建缺失的文件
  • [x] 在被比较目录中创建缺失的文件夹
  • [x] 将一个目录与多个目录进行比较
  • [x] 自动比较游戏的英文版本与给定翻译
  • [ ] 翻译标签内容
  • [ ] 展示未跟踪的文件
  • [ ] 展示未跟踪的目录
  • [ ] 展示未跟踪的标签

安装

$ go get github.com/XML-Comp/XML-Comp

运行

$ XML-Comp -translation /path/to/language/translation

工作原理

你需要提供称为"translation"的路径,描述如下:

  • "translation": 从GitHub克隆的RimWorld语言文件夹的完整路径目录。

我的"translation"路径示例:/Users/arthur/Github/RimWorld-PortugueseBrazilian

有了这个路径后,运行xml-comp -translation your/path/to/translation会让你知道项目中每个文件缺少什么,通过添加需要翻译的内容到文件中!就这么简单!

[RIMWORLD未安装在标准路径]

如果由于某种原因你没有将游戏安装在Steam的标准路径中或想使用不同的路径,可以使用original标志来暴露你的自定义游戏路径,如下所示:

  • "original": 你的RimWorld英文文件夹的完整路径目录(可选)。 我的"original"路径示例(可选):/Users/arthur/Library/Application Support/Steam/steamapps/common/RimWorld/RimWorldMac.app/Mods/Core/Languages/English

要使用此标志,你需要将其与translation标志一起解析,如:xml-comp -original path/... -translation path/...

比较任何类型的文档

要比较任何类型的文件,你只需要使用标志-doc <type name>,例如-doc html。这将使用你提供的路径仅比较指定类型的文档。另一个例子:

$ XML-Comp -doc html -original path/to/It -translation path/to/It

注意:这不是必需的,默认情况下它会比较遇到的所有.xml文件。

仅使用比较器包

// 导入包
import "github.com/XML-Comp/XML-Comp/comparer"
// 设置文档类型变量为所需的文档
// 不带"." | 例如:"xml"或"html"
comparer.DocType = "html"
// 使用完整路径开始主函数进行比较
// firstPath总是用作模型
func main() {
    err := comparer.Compare(firstPath, comparingPath)
    if err != nil {
        log.Fatal(err)
    }
}

更多关于golang命令行XML比较与差异生成插件XML-Comp的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于golang命令行XML比较与差异生成插件XML-Comp的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


使用XML-Comp进行Golang命令行XML比较与差异生成

XML-Comp是一个实用的Golang命令行工具,用于比较两个XML文件并生成差异报告。下面我将详细介绍如何使用这个工具。

安装XML-Comp

首先,使用go get命令安装XML-Comp:

go get -u github.com/xml-comp/xml-comp

或者如果你已经克隆了仓库:

go install github.com/xml-comp/xml-comp/cmd/xml-comp

基本使用方法

XML-Comp的基本命令格式如下:

xml-comp [flags] file1.xml file2.xml

简单比较示例

xml-comp config_v1.xml config_v2.xml

这会输出两个XML文件的差异概览。

常用选项

  1. 输出格式控制

    xml-comp -format=json old.xml new.xml  # JSON格式输出
    xml-comp -format=xml old.xml new.xml  # XML格式输出差异
    
  2. 忽略空格和注释

    xml-comp -ignore-whitespace -ignore-comments file1.xml file2.xml
    
  3. 详细输出

    xml-comp -v file1.xml file2.xml
    
  4. 输出到文件

    xml-comp -output=diff.txt file1.xml file2.xml
    

Golang代码集成示例

如果你想在自己的Go程序中使用XML-Comp的功能,可以这样集成:

package main

import (
	"fmt"
	"os"
	
	"github.com/xml-comp/xml-comp/compare"
)

func main() {
	if len(os.Args) < 3 {
		fmt.Println("Usage: myapp <file1.xml> <file2.xml>")
		os.Exit(1)
	}

	file1 := os.Args[1]
	file2 := os.Args[2]

	// 比较XML文件
	result, err := compare.Files(file1, file2, &compare.Options{
		IgnoreWhitespace: true,
		IgnoreComments:  true,
	})
	
	if err != nil {
		fmt.Printf("比较错误: %v\n", err)
		os.Exit(1)
	}

	// 输出差异报告
	if result.Equal {
		fmt.Println("XML文件相同")
	} else {
		fmt.Println("发现差异:")
		for _, diff := range result.Differences {
			fmt.Printf("- 类型: %s, 路径: %s\n", diff.Type, diff.Path)
			fmt.Printf("  旧值: %s\n", diff.OldValue)
			fmt.Printf("  新值: %s\n", diff.NewValue)
		}
	}
}

高级功能

  1. 自定义比较规则: 可以通过编写比较规则文件来定义特定的比较逻辑:

    xml-comp -rules=myrules.json file1.xml file2.xml
    
  2. 忽略特定路径

    xml-comp -exclude="/config/settings/ignored" file1.xml file2.xml
    
  3. 仅比较结构

    xml-comp -structure-only file1.xml file2.xml
    

输出解释

XML-Comp的典型输出包括:

  • 差异类型(添加、删除、修改)
  • XML路径(XPath格式)
  • 旧值(第一个文件中的值)
  • 新值(第二个文件中的值)

性能优化

对于大型XML文件,可以使用以下选项提高性能:

xml-comp -stream -batch-size=1000 large1.xml large2.xml

这将以流式方式处理XML文件,减少内存使用。

总结

XML-Comp是一个功能强大且灵活的XML比较工具,特别适合配置管理、测试验证和版本控制等场景。通过命令行选项和Go API,它可以满足从简单到复杂的各种XML比较需求。

如需更详细的信息,可以参考项目的GitHub页面或使用xml-comp -help查看完整帮助信息。

回到顶部