我的目标是在元素为空时将结束标记打断为新行,并使用Go xml包。
此外,当元素为空时,无论嵌套深度如何,我都希望将结束标记缩进到与开始标记相同的深度。
go版本go1.15.2 darwin/amd64
想要
<aaa>
<bbb>
</bbb>
</aaa>
但是,如果内容为空,Go-xmlEncodeElement将生成不换行的结束标记。
https://play.golang.org/p/fa76aeZ9Xss
func main() {
var b bytes.Buffer
e := xml.NewEncoder(&b)
e.Indent("", " ")
aaa := xml.StartElement{Name: xml.Name{Local: "aaa"}}
e.EncodeToken(aaa)
bbb := xml.StartElement{Name: xml.Name{Local: "bbb"}}
e.EncodeToken(bbb)
e.EncodeToken(bbb.End())
e.EncodeToken(aaa.End())
// execute
e.Flush()
fmt.Println(b.String())
}
<aaa>
<bbb></bbb>
</aaa>
我尝试在<bbb>
处插入n
。但是</bbb>
没有缩进。
c := xml.CharData([]byte("n"))
e.EncodeToken(c)
https://play.golang.org/p/ekShCtPXBWR
<aaa>
<bbb>
</bbb>
</aaa>
此外,无论嵌套方式如何,我都希望结束标记缩进与开始标记相同的深度。
<xxx>
<aaa>
<yyy>
<bbb>
</bbb>
</yyy>
</aaa>
</xxx>
有人知道解决办法吗?
根据收到的信息自行解决。
保存调用EncodeToken的次数,因为您需要知道要缩进多少空格。
aaa := xml.StartElement{Name: xml.Name{Local: "aaa"}}
e.EncodeToken(aaa)
cnt++
e.EncodeToken(aaa.End())
使用保存的计数插入缩进。
// insert new line, and indent
c := "n"
for i := 0; i < cnt; i++ {
c = c + " "
}
e.EncodeToken(xml.CharData([]byte(c)))
https://play.golang.org/p/2-5qEHjT2B4
谢谢。