为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Go 中使用可选标签封送 xml

如何在 Go 中使用可选标签封送 xml

Go
慕姐8265434 2021-11-29 15:51:08
我的问题的代码在这里:https : //play.golang.org/p/X8Ey2hqmxLpackage mainimport (    "encoding/xml"    "fmt"    "log")type Carriage struct {    MainCarriage interface{} `xml:"mainCarriage"`}type SeaCarriage struct {    Sea          xml.Name `xml:"http://www.example.com/XMLSchema/standard/2012 sea"`    LoadFactor   float64  `xml:"loadFactor,attr"`    SeaCargoType string   `xml:"seaCargoType,attr"`}type RoadCarriage struct {    Road xml.Name `xml:"http://www.example.com/XMLSchema/standard/2012 road"`}func main() {    fr := Carriage{        MainCarriage: SeaCarriage{            LoadFactor:   70,            SeaCargoType: "Container",        },    }    xmlBlob, err := xml.MarshalIndent(&fr, "", "\t")    if err != nil {        log.Fatal(err)    }    fmt.Println(string(xmlBlob))}我需要将数据编组到 SOAP xml 中。我目前得到这个结果:<Carriage>    <mainCarriage loadFactor="70" seaCargoType="Container">        <sea xmlns="http://www.example.com/XMLSchema/standard/2012"></sea>    </mainCarriage></Carriage>但我需要这个结果:<Carriage>    <mainCarriage>        <sea xmlns="http://www.example.com/XMLSchema/standard/2012" loadFactor="70" seaCargoType="Container"></sea>    </mainCarriage></Carriage>无论我尝试什么,我都无法编组结构,因此 loadFactor 和 seaCargoType 是sea标签的属性。Carriage 结构采用空接口,因为根据运输类型,标签应该是海运或公路,但不能同时是两者。
查看完整描述

1 回答

?
森栏

TA贡献1810条经验 获得超5个赞

把>.后mainCarriage场的标签,以表明你希望把字段的内容里面mainCarriage的标签。将Sea字段名称更改XMLName为 marshaller 的要求。


package main


import (

    "encoding/xml"

    "fmt"

    "log"

)


type Carriage struct {

    MainCarriage interface{} `xml:"mainCarriage>."`

}


type SeaCarriage struct {

    XMLName      xml.Name `xml:"http://www.example.com/XMLSchema/standard/2012 sea"`

    LoadFactor   float64  `xml:"loadFactor,attr"`

    SeaCargoType string   `xml:"seaCargoType,attr"`

}


type RoadCarriage struct {

    Road xml.Name `xml:"http://www.example.com/XMLSchema/standard/2012 road"`

}


func main() {


    fr := Carriage{

        MainCarriage: SeaCarriage{

            LoadFactor:   70,

            SeaCargoType: "Container",

        },

    }

    xmlBlob, err := xml.MarshalIndent(&fr, "", "\t")

    if err != nil {

        log.Fatal(err)

    }

    fmt.Println(string(xmlBlob))

}


查看完整回答
反对 回复 2021-11-29
  • 1 回答
  • 0 关注
  • 161 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信