【发布时间】:2018-07-27 13:59:00
【问题描述】:
我想解析一个 XML 文件的属性。
它适用于任何“正常”属性,例如 <application name="AppName">
但如果属性中包含“:”,我将无法检索该属性的值。例如<application name:test="AppName">
这是我用来解析这个的代码:
package main
import "fmt"
import "encoding/xml"
type Application struct {
Event Event `xml:"application"`
Package string `xml:"package,attr"`
}
type Event struct {
IsValid string `xml:"test:isValid,attr"`
}
var doc = []byte(`<?xml version="1.0" encoding="utf-8" standalone="no"?>
<application package="leNomDuPackage">
<event test:isValid="true">
</application>
</manifest>`)
func main() {
application := Application{}
xml.Unmarshal(doc, &application)
fmt.Println("Application: ", application)
fmt.Println("isValid:", application.Event)
}
你也可以在 Golang 操场上找到它:[https://play.golang.org/p/R6H80xPezhm
我想检索isValid 属性的值。
目前,我收到该错误消息,但无法解决。
struct field tag
xml:"test\:isValid,attrnot compatible with reflect.StructTag.Get: struct tag value 语法错误
我也尝试了以下值
type Event struct {
IsValid string `xml:"test isValid,attr`
}
和
type Event struct {
IsValid string `xml:"test\:isValid,attr`
}
但它并不能正常工作。
【问题讨论】:
-
您在标签中缺少结束
",这就是来自 Go vet 的警告消息的原因。并不是说它会使其工作或任何事情,它只会摆脱警告。 -
要真正解决您的问题,只需删除标签中的测试前缀,并让 Event 字段的标签名称为
event,与 xml 元素相同,而不是application。例如。 (play.golang.org/p/cYDHw1LCklK) -
XMLName字段不是必需的,这不是使它起作用的原因。但输入应该是有效的 XML。
标签: xml go xml-parsing