大佬教程收集整理的这篇文章主要介绍了golang xml marshal对应的struct两种表示方法,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_874_1@
1.xml的节点名字就是struct成员的名字,如:Project.ItemGroup,成员的类型名不影响
//vcxproj.filters type Project struct { ToolsVersion String `xml:"ToolsVersion,attr"` Xmlns String `xml:"xmlns,attr"` ItemGroup []FilterGroup //`xml:"ItemGroup"` } type FilterGroup struct { Filter []Filter //`xml:"Filter"` } type Filter struct { Include String `xml:"Include,attr"` UniquEIDentifier String }@H_874_1@ @H_874_1@
<?xml version="1.0" encoding="UTF-8"?> <Project ToolsVersion="4.0" xmlns="http://scheR_1000_11845@as.microsoft.com/developer/msbuild/2003"> <ItemGroup> <Filter Include="pub"> <UniquEIDentifier>{470d3840-f2c2-4c5b-430f-e9d745bcc309}</UniquEIDentifier> </Filter> <Filter Include="src"> <UniquEIDentifier>{446a4d3d-d7e0-4ad9-7cf9-917fbba3cf8b}</UniquEIDentifier> </Filter> <Filter Include="pub\base"> <UniquEIDentifier>{1281d07c-e739-4f48-502d-54211f00ae19}</UniquEIDentifier> </Filter> <Filter Include="pub\driver"> <UniquEIDentifier>{d43ac9c6-a8f0-4484-5811-927daab37970}</UniquEIDentifier> </Filter> <Filter Include="pub\protocol"> <UniquEIDentifier>{35a150d1-33f3-4a98-5f0b-bb71982506ec}</UniquEIDentifier> </Filter> <Filter Include="pub\st_lib"> <UniquEIDentifier>{3e64a85e-249d-4a03-521e-4b5813b40edD}</UniquEIDentifier> </Filter> <Filter Include="pub\startup"> <UniquEIDentifier>{6cd70ce7-0c9c-4582-60e7-9e9b420aa43a}</UniquEIDentifier> </Filter> <Filter Include="pub\w5500"> <UniquEIDentifier>{Bafafc00-7fb5-4ccb-4b30-5511fe90a3cD}</UniquEIDentifier> </Filter> </ItemGroup> </Project>@H_874_1@ @H_874_1@
@H_874_1@
2. xml节点的名字是struct的tag名字
xml的ItemGroup使用`xml:"ItemGroup"`标注的方法,注意只需要给slice的名字标注就可以了,具体的slice类型名字随便取
//vcxproj.filters type Project struct { ToolsVersion String `xml:"ToolsVersion,attr"` FilterGroups []FilterGroup `xml:"ItemGroup"` } type FilterGroup struct { Filter []Filter //`xml:"Filter"` } type Filter struct { Include String `xml:"Include,attr"` UniquEIDentifier String }@H_874_1@ @H_874_1@
@H_874_1@
<?xml version="1.0" encoding="UTF-8"?> <Project ToolsVersion="4.0" xmlns="http://scheR_1000_11845@as.microsoft.com/developer/msbuild/2003"> <ItemGroup> <Filter Include="pub"> <UniquEIDentifier>{a0e40766-d234-4847-4772-a9b08d2fb21E}</UniquEIDentifier> </Filter> <Filter Include="src"> <UniquEIDentifier>{7fa4c884-635d-4e65-5bf9-c692ba305c9E}</UniquEIDentifier> </Filter> <Filter Include="pub\base"> <UniquEIDentifier>{e4821dfa-f228-4150-58fa-4bee90398973}</UniquEIDentifier> </Filter> <Filter Include="pub\driver"> <UniquEIDentifier>{f00ff500-af7f-4c11-703f-3e5f17e5c74b}</UniquEIDentifier> </Filter> <Filter Include="pub\protocol"> <UniquEIDentifier>{26776cca-98bd-4b46-56f8-882a0aa73cd7}</UniquEIDentifier> </Filter> <Filter Include="pub\st_lib"> <UniquEIDentifier>{d3a26e89-26d5-4d33-7a87-aea134553ac8}</UniquEIDentifier> </Filter> <Filter Include="pub\startup"> <UniquEIDentifier>{460fb330-ba31-4d5f-7060-b4719e560dc9}</UniquEIDentifier> </Filter> <Filter Include="pub\w5500"> <UniquEIDentifier>{Bc43b180-e95a-4ed2-7031-5bc686e65132}</UniquEIDentifier> </Filter> </ItemGroup> </Project>@H_874_1@
@H_874_1@
以上测试使用的代码(注意两种情况下struct的成员名字变化了需要简单的修改下代码)
func TestFilters(t *tesTing.T) { var prj Project prj.ToolsVersion = "4.0" prj.Xmlns = "http://scheR_1000_11845@as.microsoft.com/developer/msbuild/2003" prj.ItemGroup = make([]FilterGroup,1) filter_strs := []String{"pub","src","pub\\base","pub\\driver","pub\\protocol","pub\\st_lib","pub\\startup","pub\\w5500"} filters := make([]Filter,len(filter_strs)) prj.ItemGroup[0].Filter = filters for i := 0; i < len(filters); i++ { f := &filters[i] f.Include = filter_strs[i] uid,_ := uuid.NewV4() f.UniquEIDentifier = fmt.Sprintf("{%s}",uid.String()) } data,err := xml.MarshalIndent(&prj,"","\t") if err != nil { fmt.Println(err) return } fmt.Print(xml.Header) fmt.Println(String(data)) t.Error(" ") }
以上是大佬教程为你收集整理的golang xml marshal对应的struct两种表示方法全部内容,希望文章能够帮你解决golang xml marshal对应的struct两种表示方法所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。