编程网今天将给大家带来《当元素为空时,如何使用 xml 包在结束标记中换行》,感兴趣的朋友请继续看下去吧!以下内容将会涉及到等等知识点,如果你是正在学习Golang或者已经是大佬级别了,都非常欢迎也希望大家都能给我建议评论哈~希望能帮助到大家!
问题内容我的目标是当元素为空时将结束标记中断为新行,并使用 go xml 包。
此外,当元素为空时,我希望将结束标记缩进到与开始标记相同的深度,而不管嵌套深度如何。
go版本go1.15.2 darwin/amd64
想要
<aaa>
<bbb>
</bbb>
</aaa>
但是,如果内容为空,go xml encodeelement 将生成没有换行符的结束标记。
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
谢谢。
本篇关于《当元素为空时,如何使用 xml 包在结束标记中换行》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注编程网公众号!