为了账号安全,请及时绑定邮箱和手机立即绑定

如何将字符串转换为 XML

如何将字符串转换为 XML

Go
繁星点点滴滴 2022-05-23 17:10:43
我有一个字符串格式的 XML,有人可以帮我将 XML 字符串转换为正确的 XML 格式吗?package mainimport "fmt"func main() {    message := `<?xml proflie ><test> value '123'</test>`    fmt.Printf("%s", message)}
查看完整描述

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 &#39;123&#39;


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


查看完整回答
反对 回复 2022-05-23
  • 1 回答
  • 0 关注
  • 352 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信