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
更多关于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文件的差异概览。
常用选项
-
输出格式控制:
xml-comp -format=json old.xml new.xml # JSON格式输出 xml-comp -format=xml old.xml new.xml # XML格式输出差异
-
忽略空格和注释:
xml-comp -ignore-whitespace -ignore-comments file1.xml file2.xml
-
详细输出:
xml-comp -v file1.xml file2.xml
-
输出到文件:
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)
}
}
}
高级功能
-
自定义比较规则: 可以通过编写比较规则文件来定义特定的比较逻辑:
xml-comp -rules=myrules.json file1.xml file2.xml
-
忽略特定路径:
xml-comp -exclude="/config/settings/ignored" file1.xml file2.xml
-
仅比较结构:
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
查看完整帮助信息。