Generating XML Element without Closing Tag
In Go, the encoding/xml package is widely used to marshal structs into XML documents. However, a common challenge arises when attempting to create elements without closing tags, such as
Consider the following struct, which represents an XML envelope with nested elements:
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"` }
When marshaling this struct, the resulting XML document includes closing tags for both
<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>
To eliminate the closing tags, it is essential to understand the principles of XML. In XML, elements with no content can be represented either as empty element tags (e.g.,
According to the documentation, the encoding/xml package uses end-tags for elements with attributes and empty element tags for elements without attributes. Since both
While it may seem preferable to use empty element tags for consistency, there is no functional difference between the two forms in terms of XML validity. Both methods produce equivalent XML documents that conform to the XML specification.
Therefore, it is not recommended to attempt to force the encoding/xml package to use empty element tags for elements with attributes. Instead, accept the fact that these elements will be rendered with end-tags, as per the standard behavior of the package.
The above is the detailed content of How to Generate XML Elements Without Closing Tags in Go's `encoding/xml` Package?. For more information, please follow other related articles on the PHP Chinese website!