ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

golang encoding/xml 解析多个根节点的XML文件

2021-06-26 18:01:49  阅读:346  来源: 互联网

标签:xml XML Name encoding res changed XMLName atlas


问题

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 还是有点恶心的,侵入了我的代码结构.

标签:xml,XML,Name,encoding,res,changed,XMLName,atlas
来源: https://www.cnblogs.com/ayanmw/p/14936598.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有