我有一个XML文档。一些字段具有自定义格式。例:
<document> <title>hello world</title> <lines> line 1 line 2 line 3 </lines> </document>
我想将其导入如下结构:
type Document struct { Title string `xml:"title"` Lines []string `xml:"lines"` }
有什么方法可以实现自定义解码器,它将行字符串拆分成行数组(["line 1", "line 2", "line 3"])?
["line 1", "line 2", "line 3"]
可以将Lines字段设置为字符串类型,并在xml导入后进行拆分,但这似乎不是一个很好的解决方案。我有什么方法可以定义用于行分割的自定义解码器,并将其与xml解码器组合?
您可以通过定义符合xml.Unmarshaler接口的新类型来实现。因此,与其创建Lines一个[]string,而不是使用适当的UnmarshalXML方法声明一个新类型。例如:
xml.Unmarshaler
Lines
[]string
UnmarshalXML
type Lines []string func (l *Lines) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error { var content string if err := d.DecodeElement(&content, &start); err != nil { return err } *l = strings.Split(content, "\n") return nil }
您可以在此处看到完整的示例:http : //play.golang.org/p/3SBu3bOGjR
如果您也想支持这种类型的编码,则可以MarshalXML以类似的方式实现该方法(构造所需的字符串内容并将其传递给编码器)。
MarshalXML