xml - 如何使用Golang将字符串转换为XML

标签 xml go

我有一个字符串格式的XML,有人可以帮助我将XML字符串转换为正确的XML格式吗?
提前致谢。

package main

import "fmt"

func main() {

    message := `<?xml proflie ><test> value '123'</test>`
    fmt.Printf("%s", message)
}

最佳答案

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 &#39;123&#39;
Go在encoding/xml包中对XML具有出色的支持,并且还有其他生成输出的方法,这些方法不涉及手动构造XML。

该版本在<test>元素中进行包装,还允许您将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)
}

最后,可能也是最重要的一点,此版本使用了stuct.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)
}

现在您可以扩展该结构,但最重要的是,您还可以UnmarshalDecode这种类型,以从传入的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软件包支持的标签的完整说明,请参见xml.Marshal文档:https://golang.org/pkg/encoding/xml/#Marshal

关于xml - 如何使用Golang将字符串转换为XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60963797/

相关文章:

go - 如何使用反射访问 map 的 nil 键?

go - 如何告诉 Golang Gob 编码可以序列化包含没有导出字段的结构的结构

xml - xslt转换

javascript - 将xml嵌套到jquery中的无序列表中

java - 序列化对象而不是使用 xml 的好处

c# - 在 C# 中更改由 XmlSerializer 生成的 XML 结构

javascript - 解析 XML namespace ?

go - Println 改变 slice 的容量

Golang 运算符 &^ 工作细节

go - Golang 应用程序的可嵌入消息传递组件