登录
首页 >  Golang >  Go问答

Go语言中的XML解析

来源:stackoverflow

时间:2024-02-10 11:57:24 416浏览 收藏

本篇文章向大家介绍《Go语言中的XML解析》,主要包括,具有一定的参考价值,需要的朋友可以参考一下。

问题内容

我想将下面的 xml 有效负载解组为结构


                
                    abc
                    
                        2329-12-31 23:59:59
                        2007-11-14 11:40:00
                        1111111111
                    
                    xxxxxxx
                
                xxxxxx
                true
            

我想在标签之前添加 transactionid,如下所示:


                
                    abc
                    
                        2329-12-31 23:59:59
                        2007-11-14 11:40:00
                        1111111111
                    
                    xxxxxxx
                
                xxxxxx
        111111111111
                true
            

为此,我尝试将上面的 xml 解组到下面的结构:

type linearPackagePublish struct {
    LinearPackage           string `xml:"linearPackage"`
    MsoPartnerID            string `xml:"partnerId"`
    TransactionID           string `xml:"transactionId,omitempty"`
    WantLinearPublishResult bool   `xml:"wantLinearPublishResult,omitempty"`
}

但问题是我不想解组 linearpackage 元素,这就是为什么我将 linearpackage 作为字符串放入结构中

我也可以通过正则表达式来做到这一点,但如果 xml 中发生某些变化,它会更容易出错。

有什么方法可以让一些嵌套的 xml 元素作为字符串吗?


正确答案


已编辑以提供更多详细信息。包括 Go Playground 上的工作演示

您可以定义自定义类型,并定义其自己的编组和解组函数,而不是尝试使用字符串。这样您就可以直接控制该元素。

您可以看到自定义数据类型包含一个 xml.tokens 数组。该数组在解组期间填充,然后在编组期间写入编码器。

type skipUnmarshal struct {
    data []xml.Token
}

func (s skipUnmarshal) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
    for i := 0; i < len(s.data); i++ {
        e.EncodeToken(s.data[i])
    }
    return nil
}
func (s *skipUnmarshal) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
    for {
        t, err := d.Token()
        if err != nil {
            break // or alternatively return the error
        }
        s.data = append(s.data, t)
    }
    return nil
}

今天关于《Go语言中的XML解析》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>