我有一个字符串格式的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 '123'
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)
}
现在您可以扩展该结构,但最重要的是,您还可以
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软件包支持的标签的完整说明,请参见
xml.Marshal
文档:https://golang.org/pkg/encoding/xml/#Marshal
关于xml - 如何使用Golang将字符串转换为XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60963797/