gpt4 book ai didi

xml - 戈朗 : UnmarshalXMLAttr in encoding/xml

转载 作者:数据小太阳 更新时间:2023-10-29 03:29:08 24 4
gpt4 key购买 nike

我正在尝试解码一些 XML,我想在其中以特殊方式解析属性。我试过使用 UnmarshalerAttr interface但我无法让它工作。使用以下代码,我得到的唯一输出是“{CaSTLe}”

package main

import (
"encoding/xml"
"fmt"
"strings"
)

type Show struct {
Title string `xml:"Title,attr"`
}

func (s *Show) UnmarshalXMLAttr(attr xml.Attr) error {
fmt.Printf("Parsing attribute '%s', with value '%s'", attr.Name.Local, attr.Value)
s.Title = strings.ToUpper(attr.Value)
return nil
}

func main() {

b := []byte(`<Series Title="Castle"></Series>`)

var show Show
xml.Unmarshal(b, &show)

fmt.Println(show)
}

有什么想法吗?

最佳答案

属性 unmarshaler 需要是标题的类型,而不是节目。这是一个固定版本:

首先,我们创建一个只包装字符串并实现接口(interface)的“人造类型”

type title string

现在我们将标题字段定义为我们的类型,而不仅仅是一个字符串。

这将为此属性调用我们的解码器

type Show struct {
Title title `xml:"Title,attr"`
}

现在为我们的类型定制 unmashaler:

func (s *title) UnmarshalXMLAttr(attr xml.Attr) error {
fmt.Printf("Parsing attribute '%s', with value '%s'", attr.Name.Local, attr.Value)
*s = title(strings.ToUpper(attr.Value))
return nil
}

其余保持不变:

func main() {

b := []byte(`<Series Title="Castle"></Series>`)

var show Show
xml.Unmarshal(b, &show)

fmt.Println(show)
}

http://play.golang.org/p/6J4UZ7BeG1

关于xml - 戈朗 : UnmarshalXMLAttr in encoding/xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24980166/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com