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

我正在尝试将 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


呼如林
浏览 111回答 1
1回答

杨魅力

您如何看待这样重写您的代码(https://play.golang.org/p/Kf5VpQeuThx):package mainimport (&nbsp; &nbsp; "encoding/xml"&nbsp; &nbsp; "fmt"&nbsp; &nbsp; "os")type s2 struct {&nbsp; &nbsp; XMLName&nbsp; &nbsp; &nbsp; &nbsp; xml.Name `xml:"q3:WMLS_AddToStore"`&nbsp; &nbsp; XMLAttr&nbsp; &nbsp; &nbsp; &nbsp; string&nbsp; &nbsp;`xml:"xmlns:q3,attr"`&nbsp; &nbsp; WMLtypeIn&nbsp; &nbsp; &nbsp; string&nbsp; &nbsp;`xml:"WMLtypeIn,omitempty" json:"WMLtypeIn,omitempty" yaml:"WMLtypeIn,omitempty"`&nbsp; &nbsp; XMLin&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; string&nbsp; &nbsp;`xml:"XMLin,omitempty" json:"XMLin,omitempty" yaml:"XMLin,omitempty"`&nbsp; &nbsp; OptionsIn&nbsp; &nbsp; &nbsp; string&nbsp; &nbsp;`xml:"OptionsIn,omitempty" json:"OptionsIn,omitempty" yaml:"OptionsIn,omitempty"`&nbsp; &nbsp; CapabilitiesIn string&nbsp; &nbsp;`xml:"CapabilitiesIn,omitempty" json:"CapabilitiesIn,omitempty" yaml:"CapabilitiesIn,omitempty"`}type s1 struct {&nbsp; &nbsp; XMLName xml.Name `xml:"SOAP-ENV:Body"`&nbsp; &nbsp; S2&nbsp; &nbsp; &nbsp; s2}func main() {&nbsp; &nbsp; x := &s1{&nbsp; &nbsp; &nbsp; &nbsp; S2: s2{&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; XMLAttr:&nbsp; &nbsp; &nbsp; &nbsp; "http://www.foo.abr/message/120",&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; WMLtypeIn:&nbsp; &nbsp; &nbsp; "WMLtypeIn",&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; XMLin:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "XMLin",&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; OptionsIn:&nbsp; &nbsp; &nbsp; "OptionsIn",&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; CapabilitiesIn: "CapabilitiesIn",&nbsp; &nbsp; &nbsp; &nbsp; },&nbsp; &nbsp; }&nbsp; &nbsp; enc := xml.NewEncoder(os.Stdout)&nbsp; &nbsp; enc.Indent("", "&nbsp; ")&nbsp; &nbsp; if err := enc.Encode(x); err != nil {&nbsp; &nbsp; &nbsp; &nbsp; fmt.Printf("error: %v\n", err)&nbsp; &nbsp; }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go