我也是 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 不应从给定格式更改。