1 回答

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超7個(gè)贊
使用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>`)
}
這將產(chǎn)生輸出:test '123'
Go 在包中對(duì) XML 有很好的支持encoding/xml,還有其他方法可以生成輸出,而不涉及手動(dòng)構(gòu)建 XML。
此版本在<test>元素中進(jìn)行包裝,還允許您將 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)
}
最后,也許是最好的,這個(gè)版本使用 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)
}
現(xiàn)在您可以擴(kuò)展該結(jié)構(gòu),但最重要的是,您還可以Unmarshal或Decode這種類(lèi)型,從傳入的 XML 中提取數(shù)據(jù):
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有關(guān)xml 包支持的標(biāo)簽的完整描述,請(qǐng)參閱文檔: https ://golang.org/pkg/encoding/xml/#Marshal
- 1 回答
- 0 關(guān)注
- 378 瀏覽
添加回答
舉報(bào)