一尘不染

创建XML元素而不关闭标签

go

我有这个嵌套的golang结构:

// TierRequest is the outer most XML envelope of soap request
type TierRequest struct {
    XMLName   xml.Name `xml:"soapenv:Envelope"`
    NsEnv     string   `xml:"xmlns:soapenv,attr"`
    NsType    string   `xml:"xmlns:typ,attr"`
    Header    string   `xml:"soapenv:Header"`

// TierBody is an emtpy container with the GetCollectorProfile struct
type TierBody struct {
    GetCollectorProfiles GetCollectorProfile `Collectorxml:"typ:GetCollectorProfileRequest"`
}

// GetCollectorProfile struct has the context and collector number
type GetCollectorProfile struct {
    Contexts CollectorContext `xml:"typ:Context"`
    Number   int              `xml:"typ:CollectorNumber"`
}

// CollectorContext contanins a few variables as attributes
type CollectorContext struct {
    Channel  string `xml:"Channel,attr"`
    Source   string `xml:"Source,attr"`
    Language string `xml:"LanguageCode,attr"`
}

当我使用值对其进行初始化并进行封送处理时,encoding/xml它看起来像这样:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
                  xmlns:typ="http:/www.yahoo.com/tp/ets/2008/04/01/collector/types">
  <soapenv:Header></soapenv:Header>
  <soapenv:Body>
    <GetCollectorProfiles>
      <typ:Context Channel="WEB" Source="WEB" LanguageCode="en-CA"></typ:Context>
      <typ:CollectorNumber>50000</typ:CollectorNumber>
    </GetCollectorProfiles>
  </soapenv:Body>
</soapenv:Envelope>

我怎样才能摆脱的结束标记soapenv:Headertyp:Context,所以它只是看起来像<soapenv:Header/>


阅读 298

收藏
2020-07-02

共1个答案

一尘不染

没有内容 元素和
结束标记
在XML级别上没有区别:

<soapenv:Header></soapenv:Header>

和一个 空元素标签

<soapenv:Header/>

要控制使用哪种格式,您必须将数据视为文本而不是XML,但最好不要担心没有区别的区别。


[为完整性而添加]

…不明确和过时的建议

为了实现互操作性对于声明为EMPTY的元素,应该使用且仅应使用empty-element标签。

关于与SGML的互操作性:

互操作性

[定义:标记一个描述非约束性建议的句子,以增加XML文档可以被SGML处理器的现有安装基础处理的可能性,该基础早于ISO
8879的WebSGML适应附件。]

2020-07-02