生成不带结束标记的 XML 元素
在 Go 中,encoding/xml 包广泛用于将结构编组到 XML 文档中。然而,当尝试创建不带结束标签的元素时,会出现一个常见的挑战,例如
考虑以下结构,它表示具有嵌套元素的 XML 信封:
type TierRequest struct { // ... Header string `xml:"soapenv:Header"` Body TierBody `xml:"soapenv:Body"` } type TierBody struct { GetCollectorProfiles GetCollectorProfile `xml:"typ:GetCollectorProfileRequest"` } type GetCollectorProfile struct { Contexts CollectorContext `xml:"typ:Context"` Number int `xml:"typ:CollectorNumber"` } type CollectorContext struct { Channel string `xml:"Channel,attr"` Source string `xml:"Source,attr"` Language string `xml:"LanguageCode,attr"` }
编组此结构时,生成的 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>
要消除结束标记,必须了解 XML 的原理。在 XML 中,没有内容的元素可以表示为空元素标签(例如,
根据文档,encoding/xml包对带有属性的元素使用结束标签,对没有属性的元素使用空元素标签。由于
虽然使用空元素标签来保持一致性似乎更可取,但就 XML 有效性而言,两种形式之间没有功能差异。两种方法都会生成符合 XML 规范的等效 XML 文档。
因此,不建议尝试强制encoding/xml 包对具有属性的元素使用空元素标签。相反,接受这样一个事实:根据包的标准行为,这些元素将使用结束标记进行渲染。
以上是如何在 Go 的 `encoding/xml` 包中生成没有关闭标签的 XML 元素?的详细内容。更多信息请关注PHP中文网其他相关文章!