gpt4 book ai didi

templates - golang 模板转义第一个字符

转载 作者:IT王子 更新时间:2023-10-29 02:33:54 29 4
gpt4 key购买 nike

我正在尝试使用标准模板包构建站点地图 XML 文件。
但是第一个字符集“<”变为“< ;”,并使客户端无法读取 XML。

package main

import (
"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)
}

playground golang

这正常吗?
我怎样才能让它正常工作。

提前致谢

最佳答案

您的示例显示您正在使用 html/template 包,它会自动转义文本以供 html 使用。

如果您想要一个原始模板引擎,请改用 text/template 包 - html 包只是用上下文感知转义来包装它。

但是,您需要自己确保使用原始模板引擎输出的文本是 XML 安全的。您可以通过向您的模板公开一些 escape 函数,并通过该函数传递所有文本而不是直接编写它们来实现。

[编辑] 它看起来像是 html/template 中的一个错误,如果您从 xml 声明中省略 ? 它可以正常工作。但我的建议仍然有效——如果它不是 html,你最好使用 text/template 包。实际上,更好的是,将站点地图描述为结构,根本不使用模板,只使用 XML 序列化。

关于templates - golang 模板转义第一个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32333279/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com