> 백엔드 개발 > Golang > Go\의 `encoding/xml` 패키지에서 태그를 닫지 않고 XML 요소를 생성하는 방법은 무엇입니까?

Go\의 `encoding/xml` 패키지에서 태그를 닫지 않고 XML 요소를 생성하는 방법은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-11-20 04:09:02
원래의
696명이 탐색했습니다.

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

닫는 태그 없이 XML 요소 생성

Go에서 인코딩/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에서 내용이 없는 요소는 빈 요소 태그(예: ) 또는 종료 태그가 있는 요소(예: )로 표시될 수 있습니다. . 이 두 형식 사이의 선택은 인코딩/xml 패키지에 의해 제어됩니다.

문서에 따르면 인코딩/xml 패키지는 속성이 있는 요소에 종료 태그를 사용하고 속성이 없는 요소에 빈 요소 태그를 사용합니다. 속성이 있으면 항상 끝 태그로 렌더링됩니다.

일관성을 위해 빈 요소 태그를 사용하는 것이 바람직해 보일 수도 있지만 XML 유효성 측면에서 두 형식 간에 기능적 차이는 없습니다. 두 방법 모두 XML 사양을 준수하는 동등한 XML 문서를 생성합니다.

따라서 인코딩/xml 패키지가 속성이 있는 요소에 대해 빈 요소 태그를 사용하도록 강제하는 것은 권장되지 않습니다. 대신, 패키지의 표준 동작에 따라 이러한 요소가 종료 태그로 렌더링된다는 사실을 받아들이세요.

위 내용은 Go\의 `encoding/xml` 패키지에서 태그를 닫지 않고 XML 요소를 생성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿