我正在尝试使用标准模板包构建站点地图 XML 文件。但是第一个字符集“ < ”变成了“ < ”,使客户无法读取XML。package mainimport ( "bytes" "fmt" "html/template")const ( tmplStr = `{{define "indexSitemap"}}<?xml version="1.0" encoding="UTF-8"?><sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"><sitemap> <loc>https://www.test.com/sitemap.xml</loc></sitemap><sitemap> <loc>https://www.test.com/events-sitemap.xml</loc></sitemap><sitemap> <loc>https://www.test.com/gamesAndTeams-sitemap.xml</loc></sitemap></sitemapindex>{{end}}`)func main() { // Parse the template and check for error tmpl, parseErr := template.New("test").Parse(tmplStr) if parseErr != nil { fmt.Println(parseErr) return } // Init the writer buf := new(bytes.Buffer) // Execute and get the template error if any tmplExErr := tmpl.ExecuteTemplate(buf, "indexSitemap", nil) if tmplExErr != nil { fmt.Println(tmplExErr) return } // Print the content malformed fmt.Println(buf)}这是正常的吗?我怎样才能让它正常工作。
2 回答
慕村9548890
TA贡献1884条经验 获得超4个赞
您的示例显示您正在使用该html/template
包,它会自动转义 html 使用的文本。
如果您想要一个原始模板引擎,请改用该text/template
包 - html 只是使用上下文感知转义来包装它。
但是,您需要自己确保使用原始模板引擎输出的文本是 XML 安全的。您可以通过escape
向模板公开一些函数并通过此函数传递所有文本而不是直接编写它们来实现此目的。
[编辑]它看起来像一个错误html/template
,如果你?
从 xml 声明中省略它,它工作正常。但我的建议仍然有效——如果它不是 html,你最好使用这个text/template
包。实际上,更好的是,将站点地图描述为结构体,根本不使用模板,仅使用 XML 序列化。
- 2 回答
- 0 关注
- 222 浏览
添加回答
举报
0/150
提交
取消