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

go - 标签中的属性/隐藏父标签:SOAP 信封

go - 标签中的属性/隐藏父标签:SOAP 信封

Go
呼如林 2023-04-24 16:28:35
我正在尝试将 Go 结构编码为 Soap-Envelope (xml)。到目前为止,除了一个小错误外,皂体看起来还不错。虽然我的信封应该是这样的:<SOAP-ENV:Body>    <q3:WMLS_AddToStore xmlns:q3="http://www.foo.abr/message/120">        <WMLtypeIn>param1</WMLtypeIn>        <XMLin>param2</XMLin>        <OptionsIn>param3</OptionsIn>        <CapabilitiesIn>param4</CapabilitiesIn>    </q3:WMLS_AddToStore></SOAP-ENV:Body>我的代码正在生成这个:<SOAP-ENV:Body>  <q1:WMLS_AddToStore xmlns:q1="http://www.foo.abr/message/120">    <ActionName>      <WMLtypeIn>param1</WMLtypeIn>      <XMLin>param2</XMLin>      <OptionsIn>param3</OptionsIn>      <CapabilitiesIn>param4</CapabilitiesIn>    </ActionName>  </q1:WMLS_AddToStore></SOAP-ENV:Body>注意 ActionName 标记。我想:删除此 ActionName 标签或者将其重命名为q3:WMLS_AddToStore(我可以这样做),但随后我需要xmlns:q1向其添加属性。代码:type Message interface{}type OperationWMLS_AddToStoreSoapIn struct {WMLtypeIn      string `xml:"WMLtypeIn,omitempty"`XMLin          string `xml:"XMLin,omitempty"`OptionsIn      string `xml:"OptionsIn,omitempty"`CapabilitiesIn string `xml:"CapabilitiesIn,omitempty"`}type Body struct {XMLName    xml.Name     `xml:"SOAP-ENV:Body"`ActionName temperature `xml:"q1:WMLS_AddToStore"`}type Action struct {ActionName Message `xml:",innerxml"`XMLAttr    string  `xml:"xmlns:q1,attr"`}func main() {in := struct {    OperationWMLS_AddToStoreSoapIn `xml:"tns:WMLS_AddToStore"`}{    OperationWMLS_AddToStoreSoapIn{        "WMLtypeIn",        "XMLin",        "OptionsIn",        "CapabilitiesIn",    },}x := &Body{    ActionName: Action{        ActionName: in,        XMLAttr: "http://www.foo.abr/message/120",        },    }enc := xml.NewEncoder(os.Stdout)enc.Indent("", "  ")if err := enc.Encode(x); err != nil {    fmt.Printf("error: %v\n", err)}}这是游乐场: https://play.golang.org/p/fWl-G2d8ME2
查看完整描述

1 回答

?
杨魅力

TA贡献1811条经验 获得超6个赞

您如何看待这样重写您的代码(https://play.golang.org/p/Kf5VpQeuThx):

package main


import (

    "encoding/xml"

    "fmt"

    "os"

)


type s2 struct {

    XMLName        xml.Name `xml:"q3:WMLS_AddToStore"`

    XMLAttr        string   `xml:"xmlns:q3,attr"`

    WMLtypeIn      string   `xml:"WMLtypeIn,omitempty" json:"WMLtypeIn,omitempty" yaml:"WMLtypeIn,omitempty"`

    XMLin          string   `xml:"XMLin,omitempty" json:"XMLin,omitempty" yaml:"XMLin,omitempty"`

    OptionsIn      string   `xml:"OptionsIn,omitempty" json:"OptionsIn,omitempty" yaml:"OptionsIn,omitempty"`

    CapabilitiesIn string   `xml:"CapabilitiesIn,omitempty" json:"CapabilitiesIn,omitempty" yaml:"CapabilitiesIn,omitempty"`

}


type s1 struct {

    XMLName xml.Name `xml:"SOAP-ENV:Body"`

    S2      s2

}


func main() {

    x := &s1{

        S2: s2{

            XMLAttr:        "http://www.foo.abr/message/120",

            WMLtypeIn:      "WMLtypeIn",

            XMLin:          "XMLin",

            OptionsIn:      "OptionsIn",

            CapabilitiesIn: "CapabilitiesIn",

        },

    }


    enc := xml.NewEncoder(os.Stdout)

    enc.Indent("", "  ")

    if err := enc.Encode(x); err != nil {

        fmt.Printf("error: %v\n", err)

    }

}


查看完整回答
反对 回复 2023-04-24
  • 1 回答
  • 0 关注
  • 97 浏览
慕课专栏
更多

添加回答

举报

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