创建不带结束标记的XML元素

创建不带结束标记的XML元素,xml,go,xml-parsing,Xml,Go,Xml Parsing,我有一个嵌套的golang结构: //TierRequest是soap请求最外层的XML信封 类型TierRequest结构{ XMLName xml.Name`xml:“soapenv:Envelope”` NsEnv字符串`xml:“xmlns:soapenv,attr”` NsType字符串`xml:“xmlns:typ,attr”` 标题字符串`xml:“soapenv:Header”` //TierBody是一个具有GetCollectorProfile结构的emtpy容器 类型Tie

我有一个嵌套的golang结构:

//TierRequest是soap请求最外层的XML信封
类型TierRequest结构{
XMLName xml.Name`xml:“soapenv:Envelope”`
NsEnv字符串`xml:“xmlns:soapenv,attr”`
NsType字符串`xml:“xmlns:typ,attr”`
标题字符串`xml:“soapenv:Header”`
//TierBody是一个具有GetCollectorProfile结构的emtpy容器
类型TierBody结构{
GetCollectorProfiles GetCollectorProfile`Collectorxml:“典型:GetCollectorProfileRequest”`
}
//GetCollectorProfile结构具有上下文和收集器编号
类型GetCollectorProfile结构{
Contexts CollectorContext`xml:“类型:上下文”`
Number int`xml:“类型:CollectorNumber”`
}
//CollectorContext包含一些变量作为属性
类型CollectorContext结构{
频道字符串`xml:“频道,属性”`
源字符串`xml:“源,属性”`
语言字符串`xml:“语言代码,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>

50000

如何去掉
soapenv:Header
typ:Context
的结束标记,这样看起来就像

没有内容的元素和元素在XML级别没有区别:

<soapenv:Header></soapenv:Header>
<soapenv:Header/>

和一个

<soapenv:Header></soapenv:Header>
<soapenv:Header/>

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


[为完整性而添加]

…除了一个晦涩而过时的

,应使用空元素标记,并且应 仅用于声明为空的元素

关于与SGML的互操作性:

用于互操作性

[定义:标记描述非约束性建议的句子 包括以增加处理XML文档的机会 由早于 WebSGML适应化ISO 8879附件。]


没有内容的元素和元素在XML级别没有区别:

<soapenv:Header></soapenv:Header>
<soapenv:Header/>

和一个

<soapenv:Header></soapenv:Header>
<soapenv:Header/>

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


[为完整性而添加]

…除了一个晦涩而过时的

,应使用空元素标记,并且应 仅用于声明为空的元素

关于与SGML的互操作性:

用于互操作性

[定义:标记描述非约束性建议的句子 包括以增加处理XML文档的机会 由早于 WebSGML适应化ISO 8879附件。]


谢谢@kjhughes,这是一个非常全面的答案。这是否意味着允许“无内容”但被键入的XSD将允许空元素标记?@WeckarE.,这意味着XSD不能施加区分空元素(
)和无内容和结束标记(
)的约束。谢谢@kjhughes,这是一个非常全面的答案。这是否意味着允许“无内容”但被键入的XSD将允许空元素标记?@WeckarE.,这意味着XSD不能施加区分空元素(
)和无内容和结束标记(
)的约束。