golang encoding/xml 解析多个根节点的XML文件
2023-09-14 08:59:54 时间
问题
xml文件格式如下:
<?xml version="1.0" encoding="utf-8"?>
<meta><version>1924</version></meta>
<record><manifest>
<file><name>res\atlas\.rec</name><version>resn/v1921</version><md5>09080959b6fee8071eeb7c7c760da5ba</md5></file>
<file><name>res\atlas\comp.atlas</name><version>resn/v1234</version><md5>a6e0254c076318fd4cbd6140ca64f2b0</md5></file>
<file><name>res\atlas\comp.png</name><version>resn/v1</version><md5>c1990d9110d0cf21ed9404e671577fed</md5></file>
</manifest></record>
写了一下 encoding/xml
的代码发现,貌似只能获取一个根节点,否则会报错:
expected element type <record> but have <meta>
曲线救国 <解决方案> 解析多个根节点的xml文件
既然你不让我解析多个根节点, 那我就修改xml文件,让其只有一个根节点. 我读取xml文本内容到 bf22 []byte 里面,然后去掉头,在包裹上我的 document即可:
changed := string(bf22)
changed = strings.ReplaceAll(changed, "<?xml version=\"1.0\" encoding=\"utf-8\"?>", "")
changed = "<document>" + changed + "</document>"
最终定义的Xml go结构为:
type MetaVersion struct {
//XMLName xml.Name `xml:"meta"`
Version int `xml:"version"`
}
type FileVDetail struct {
//XMLName xml.Name `xml:"file"`
Name string `xml:"name"`
Version string `xml:"version"`
Md5 string `xml:"md5"`
}
type RecordType struct {
XMLName xml.Name `xml:"document"`
//<meta><version>1924</version></meta>
Meta MetaVersion `xml:"meta"`
//<record><manifest>
//<file><name>res\atlas\.rec</name><version>resn/v1921</version><md5>09080959b6fee8071eeb7c7c760da5ba</md5></file>
Files []FileVDetail `xml:"record>manifest>file"`
}
不得不说 , 这个 XMLName xml.Name
还是有点恶心的,侵入了我的代码结构.
相关文章
- 使用Spring AOP实现异步文件上传
- test.py是什么文件_exe文件反编译源码工具
- TP6.0 命令行生成类库文件
- 【Groovy】Xml 反序列化 ( 使用 XmlParser 解析 Xml 文件 | 删除 Xml 文件中的节点 | 增加 Xml 文件中的节点 | 将修改后的 Xml 数据输出到文件中 )
- Linux文件安装必要知识(linux文件安装位置)
- Linux中的i节点:储存文件信息的构建块(linux中i节点)
- 深入MySQL: 利用CSV文件导入数据(csv文件导入mysql)
- Linux中list,快速操作文件和目录列表(linux中list)
- 数据安全用 Oracle 冗余字键保护你的文件(oracle冗余字键)
- ASP获取文件扩展名函数getFileExt()
- java对XML文件的解析、节点的增加、删除操作总结
- python从远程服务器下载日志文件的程序
- php常用文件操作函数汇总