首页 > 后端开发 > Golang > 如何在 Go 的 `encoding/xml` 包中生成没有关闭标签的 XML 元素?

如何在 Go 的 `encoding/xml` 包中生成没有关闭标签的 XML 元素?

Mary-Kate Olsen
发布: 2024-11-20 04:09:02
原创
676 人浏览过

How to Generate XML Elements Without Closing Tags in Go's `encoding/xml` Package?

生成不带结束标记的 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包控制。

根据文档,encoding/xml包对带有属性的元素使用结束标签,对没有属性的元素使用空元素标签。由于

都和有属性,它们将始终使用结束标签呈现。

虽然使用空元素标签来保持一致性似乎更可取,但就 XML 有效性而言,两种形式之间没有功能差异。两种方法都会生成符合 XML 规范的等效 XML 文档。

因此,不建议尝试强制encoding/xml 包对具有属性的元素使用空元素标签。相反,接受这样一个事实:根据包的标准行为,这些元素将使用结束标记进行渲染。

以上是如何在 Go 的 `encoding/xml` 包中生成没有关闭标签的 XML 元素?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板