Maison >développement back-end >Golang >Comment générer des éléments XML sans fermer les balises dans le package `encoding/xml` de Go ?

Comment générer des éléments XML sans fermer les balises dans le package `encoding/xml` de Go ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-20 04:09:02682parcourir

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

Génération d'un élément XML sans balise de fermeture

Dans Go, le package encoding/xml est largement utilisé pour regrouper des structures dans des documents XML. Cependant, un défi courant survient lorsque l'on tente de créer des éléments sans balises de fermeture, telles que .

Considérez la structure suivante, qui représente une enveloppe XML avec des éléments imbriqués :

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

Lors du marshaling de cette structure, le document XML résultant inclut des balises de fermeture pour et :

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

Pour éliminer les balises fermantes, il est essentiel de comprendre les principes de XML. En XML, les éléments sans contenu peuvent être représentés soit par des balises d'élément vides (par exemple, ), soit par des éléments avec des balises de fin (par exemple, ). . Le choix entre ces deux formes est contrôlé par le package encoding/xml.

Selon la documentation, le package encoding/xml utilise des balises de fin pour les éléments avec attributs et des balises d'élément vides pour les éléments sans attributs. Puisque les deux et ont des attributs, ils seront toujours rendus avec des balises de fin.

Bien qu'il puisse sembler préférable d'utiliser des balises d'élément vides pour des raisons de cohérence, il n'y a pas de différence fonctionnelle entre les deux formulaires en termes de validité XML. Les deux méthodes produisent des documents XML équivalents conformes à la spécification XML.

Par conséquent, il n'est pas recommandé de tenter de forcer le package encoding/xml à utiliser des balises d'élément vides pour les éléments avec des attributs. Au lieu de cela, acceptez le fait que ces éléments seront rendus avec des balises de fin, conformément au comportement standard du package.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn