gpt4 book ai didi

xml - 解析动态 XML

转载 作者:数据小太阳 更新时间:2023-10-29 02:33:04 26 4
gpt4 key购买 nike

我了解如何将简单的 xml 数据解码为 Go 结构,但不知道如何处理动态标签。这是一个例子。可以有 <image_3><image_4>等等

<?xml version="1.0" encoding="utf-8"?>
<products>
<product>
<product_id>11600</product_id>
<date_created><![CDATA[2018-10-19 15:20:22]]></date_created>
<price>200</price>
<stock_status>In Stock</stock_status>
<images>
<image_1>1.jpg</image_1>
<image_2>2.jpg</image_2>
</images
</product>
</products>

//更新

type Products struct {
XMLName xml.Name `xml:"products"`
Text string `xml:",chardata"`
Product struct {
Text string `xml:",chardata"`
ProductID string `xml:"product_id"`
DateCreated string `xml:"date_created"`
Price string `xml:"price"`
StockStatus string `xml:"stock_status"`
Images map[string]string `xml:"images"`
} `xml:"product"`
}

当我运行 fmt.Println(len(products.Product[0].Images))我得到 0。我在这里缺少什么?

最佳答案

您可以像这样在自定义映射类型上实现 xml.Unmarshaler 接口(interface):

type Images map[string]string

func (i *Images) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
*i = make(Images) // initialize the map
for {
tok, err := d.Token()
if err != nil {
if err == io.EOF {
return nil
}
return err
}

if se, ok := tok.(xml.StartElement); ok {
tok, err = d.Token()
if err != nil {
if err == io.EOF {
return nil
}
return err
}
if data, ok := tok.(xml.CharData); ok {
(*i)[se.Name.Local] = string(data)
}
}
}
}

https://play.golang.com/p/gi9Fiv3PS8M

关于xml - 解析动态 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57854313/

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