我有这个嵌套的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它看起来像这样:
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:Header和typ:Context,所以它只是看起来像<soapenv:Header/>?
soapenv:Header
typ:Context
<soapenv:Header/>
没有内容 的 元素和 结束标记 在XML级别上没有区别:
<soapenv:Header></soapenv:Header>
和一个 空元素标签 :
要控制使用哪种格式,您必须将数据视为文本而不是XML,但最好不要担心没有区别的区别。
[为完整性而添加]
…不明确和过时的建议
为了实现互操作性,对于声明为EMPTY的元素,应该使用且仅应使用empty-element标签。
关于与SGML的互操作性:
互操作性 [定义:标记一个描述非约束性建议的句子,以增加XML文档可以被SGML处理器的现有安装基础处理的可能性,该基础早于ISO 8879的WebSGML适应附件。]
互操作性
[定义:标记一个描述非约束性建议的句子,以增加XML文档可以被SGML处理器的现有安装基础处理的可能性,该基础早于ISO 8879的WebSGML适应附件。]