首页 > 解决方案 > 如何从 marshal 重新排序 xml 标签

问题描述

我为其导出 XML 的程序似乎希望 xml 标记按特定顺序排列,如下例所示

<xml>
  <tagType1>data 1</tagType1>
  <tagType2>data 2</tagType2>
  <tagType1>data 3</tagType1>
  <tagType2>data 4</tagType2>
</xml>

在进行中,我编组为如下结构

type xml struct {
  TagType1 []string `xml:"tagType1"`
  TagType2 []string `xml:"tagType2"`
}

当我将其编组时,它会对预期的标签进行排序,但这不是我需要的。

<xml>
  <tagType1>data 1</tagType1>
  <tagType1>data 3</tagType1>
  <tagType2>data 2</tagType2>
  <tagType2>data 4</tagType2>
</xml>

encoding/xml 包有没有办法重现第一个示例中的输出?顺序不同。我读取了一个带有特定命令的 xml 文件,修改了数据并将其编组出来。我需要保留标签顺序。

标签: xmlgo

解决方案


你应该能够使用这样的东西:

type xml struct {
   Item []ItemStruct `xml:",any"`
}

type ItemStruct struct {
  XMLName xml.Name
  Value string `xml:",chardata"`
}

这样你可以保持订单,但你需要从每个项目中获取元素名称Item[i].XMLName


推荐阅读