Heim >Backend-Entwicklung >Golang >Wie generiert man XML-Elemente ohne schließende Tags im „encoding/xml'-Paket von Go?

Wie generiert man XML-Elemente ohne schließende Tags im „encoding/xml'-Paket von Go?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-20 04:09:02682Durchsuche

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

XML-Element ohne schließendes Tag generieren

In Go wird das Paket „encoding/xml“ häufig zum Marshallen von Strukturen in XML-Dokumenten verwendet. Eine häufige Herausforderung entsteht jedoch, wenn versucht wird, Elemente ohne schließende Tags zu erstellen, wie z. B. .

Bedenken Sie die folgende Struktur, die einen XML-Umschlag mit verschachtelten Elementen darstellt:

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"`
}

Beim Marshalling dieser Struktur enthält das resultierende XML-Dokument schließende Tags für beide und :

<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>

Um die schließenden Tags zu eliminieren, ist es wichtig, die Prinzipien von XML zu verstehen. In XML können Elemente ohne Inhalt entweder als leere Element-Tags (z. B. ) oder als Elemente mit End-Tags (z. B. ) dargestellt werden. . Die Wahl zwischen diesen beiden Formen wird durch das Paket „encoding/xml“ gesteuert.

Laut Dokumentation verwendet das Paket „encoding/xml“ End-Tags für Elemente mit Attributen und leere Element-Tags für Elemente ohne Attribute. Da beide und Attribute haben, werden sie immer mit End-Tags gerendert.

Obwohl es aus Gründen der Konsistenz besser erscheinen mag, leere Element-Tags zu verwenden, gibt es hinsichtlich der XML-Gültigkeit keinen funktionalen Unterschied zwischen den beiden Formen. Beide Methoden erzeugen gleichwertige XML-Dokumente, die der XML-Spezifikation entsprechen.

Daher wird nicht empfohlen, das Paket „encoding/xml“ dazu zu zwingen, leere Element-Tags für Elemente mit Attributen zu verwenden. Akzeptieren Sie stattdessen die Tatsache, dass diese Elemente gemäß dem Standardverhalten des Pakets mit End-Tags gerendert werden.

Das obige ist der detaillierte Inhalt vonWie generiert man XML-Elemente ohne schließende Tags im „encoding/xml'-Paket von Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn