我也是 Golang 和 XML 的新手。 我需要打开一个 XML 文件并通过 XML 解析进行一些更改并将生成的 XML 发送回 HTTP 响应(邮递员)。

对于需要使用 XML 解析将打开的字节值转换为结构模型

xmlFile,err := os.Open("sample.xml")
byteValue ,_:= ioutil.ReadAll(xmlfile)
var model structModel
xml.Unmarshal(byteValue,&model)

但在更改后将结构转换回 byteArray 时,使用 xml.Marshal 作为 byteValue,_=xml.Marshal(模型)

它会添加不需要的垃圾字符以及生成的 xml 字段数据“ ” 这被发现为 xml 中使用的换行符 所以尝试通过使用字节替换为“\n”来删除字符。编组后替换

byteValue = bytes.Replace(byteValue,[]byte("
"),[]byte("\n"),-1)

使用 struct 进行 Unmashalling 和 Marshalling 后,xml 输出显示字段的方式不同 示例 - sample.xml 中的 vmap:VMAP 和 vmap:AdBreak 文件名在生成的 XML 中分别更改为简单的 VMAP 和 AdBreak

示例 XML 是

<?xml version="1.0" encoding="UTF-8"?>
<vmap:VMAP xmlns:vmap="http://www.iab.net/vmap-1.0" version="1.0">
   <vmap:AdBreak User="u001" device="mobile">
      <Ad id="31966499.140094429862144" sequence="1">
         <Duration>00:00:15</Duration>
      </Ad>
      <Ad id="24061566.140094429860608" sequence="3">
         <Duration>00:00:15</Duration>
      </Ad>
   </vmap:AdBreak>
</vmap:VMAP>

我们得到的输出为

    <VMAP vmap="data" version="1.0">                                   **[vmap:VMAP -> VMAP]**
       <AdBreak User="user_1" device="cellular">                  **[vmap:AdBreak ->AdBreak]**
           <Ad id="31966499.140094429862144" sequence="1">
               <Duration>00:00:15</Duration>
           </Ad>
           <Ad id="24061566.140094429860608" sequence="3">
               <Duration>00:00:15</Duration>
           </Ad>
       </AdBreak>
   </VMAP>

并且用于该操作的结构取自这个tool

结构是

type VMAP struct {
    XMLName xml.Name `xml:"VMAP"`
    Text    string   `xml:",chardata"`
    Vmap    string   `xml:"vmap,attr"`
    Version string   `xml:"version,attr"`
    AdBreak struct {
        Text   string `xml:",chardata"`
        User   string `xml:"User,attr"`
        Device string `xml:"device,attr"`
        Ad     []struct {
            Text     string `xml:",chardata"`
            ID       string `xml:"id,attr"`
            Sequence string `xml:"sequence,attr"`
            Duration string `xml:"Duration"`
        } `xml:"Ad"`
    } `xml:"AdBreak"`
}

现在请帮助我获得与示例输入 xml 格式相同的输出,例如 xml 版本,并且 vmap:VMAP 和 vmap:adBreak 不应从给定格式更改。