1 回答
TA贡献1796条经验 获得超7个赞
使用encoding/xml具有以下EscapeText功能的包:
package main
import (
"bytes"
"encoding/xml"
"fmt"
)
func Xml(in string) string {
var b bytes.Buffer
xml.EscapeText(&b, []byte(in))
return b.String()
}
func main() {
fmt.Println(`<?xml profile><test>` + Xml(`test '123'`) + `</test>`)
}
这将产生输出:test '123'
Go 在包中对 XML 有很好的支持encoding/xml,还有其他方法可以生成输出,而不涉及手动构建 XML。
此版本在<test>元素中进行包装,还允许您将 an 传递interface{}给EncodeElement方法,因此您不仅限于字符串:
package main
import (
"encoding/xml"
"os"
)
func main() {
s := `test '123'`
test := xml.StartElement{Name:xml.Name{Local:`test`}}
xml.NewEncoder(os.Stdout).EncodeElement(s, test)
}
最后,也许是最好的,这个版本使用 astuct和.Encode方法:
package main
import (
"encoding/xml"
"os"
)
type Test struct {
XMLName xml.Name `xml:"test"`
Content string `xml:",chardata"`
}
func main() {
s := Test{Content:`test '123'`}
xml.NewEncoder(os.Stdout).Encode(&s)
}
现在您可以扩展该结构,但最重要的是,您还可以Unmarshal或Decode这种类型,从传入的 XML 中提取数据:
package main
import (
"bytes"
"encoding/xml"
"fmt"
)
type Test struct {
XMLName xml.Name `xml:"test"`
Content string `xml:",chardata"`
}
func main() {
s := Test{Content:`test '123'`}
var buf bytes.Buffer
xml.NewEncoder(&buf).Encode(&s)
fmt.Println("Encoded =", buf.String())
var read Test
xml.NewDecoder(bytes.NewReader(buf.Bytes())).Decode(&read)
fmt.Println("Content =", read.Content)
}
xml.Marshal有关xml 包支持的标签的完整描述,请参阅文档: https ://golang.org/pkg/encoding/xml/#Marshal
- 1 回答
- 0 关注
- 352 浏览
添加回答
举报