終了タグを使用しない 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 の有効性という点では 2 つの形式の間に機能的な違いはありません。どちらの方法でも、XML 仕様に準拠した同等の XML ドキュメントが生成されます。
したがって、属性を持つ要素に対して空の要素タグを使用するようにエンコーディング/xml パッケージに強制することはお勧めできません。代わりに、パッケージの標準動作に従って、これらの要素が終了タグ付きでレンダリングされるという事実を受け入れてください。
以上がGo の `encoding/xml` パッケージで終了タグを使用せずに XML 要素を生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。