golang xml marshal對應的struct兩種表示方法

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。


1.xml的節點名字就是struct成員的名字,如:Project.ItemGroup,成員的類型名不影響

//vcxproj.filterstype 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}


<?xml version="1.0" encoding="UTF-8"?><Project ToolsVersion="4.0" xmlns="http://schemas.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>



2. xml節點的名字是struct的tag名字

xml的ItemGroup使用`xml:"ItemGroup"`標註的方法,注意只需要給slice的名字標註就可以了,具體的slice類型名字隨便取

//vcxproj.filterstype Project struct {ToolsVersion string        `xml:"ToolsVersion,attr"`Xmlns        string        `xml:"xmlns,attr"`FilterGroups []FilterGroup `xml:"ItemGroup"`}type FilterGroup struct {Filter []Filter //`xml:"Filter"`}type Filter struct {Include          string `xml:"Include,attr"`UniqueIdentifier string}



<?xml version="1.0" encoding="UTF-8"?><Project ToolsVersion="4.0" xmlns="http://schemas.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>


以上測試使用的代碼(注意兩種情況下struct的成員名字變化了需要簡單的修改下代碼)

func TestFilters(t *testing.T) {var prj Projectprj.ToolsVersion = "4.0"prj.Xmlns = "http://schemas.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 = filtersfor 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(" ")}



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.