xml - 如何将字符串转换为 XML
问题描述
我有一个字符串格式的 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 在包中对 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
推荐阅读
- android - Appsflyer 日志拒绝在以前失败的类 java.lang.Class 上重新初始化
: java.lang.ExceptionInInitializerError: - java - javax.net.ssl.SSLHandshakeException 在从 Java 客户端测试 Web 服务
- python - 将 2d 数组堆叠到 numpy 中的现有 3d 数组中
- powershell - 使用powershell从json文件中删除一个对象
- ios - Swift 5无法从从pickerview中选择的函数中获取变量字符串以更新Label.text
- jquery - jQuery访问输入字段值
- python - Pydantic 和“构造函数”
- python - Python 情节 | 禁用具有子图的图中的所有范围滑块
- python - 附加两个相同维度的数组
- javascript - 试图显示文本,但没有运气。但是,我检查我的控制台并看到带有 p 标签的空 div。应用程序没有中断