以下结构用于编组SAML XML元素,例如OrganizationName
,OrganizationDisplayName
& OrganizationURL
。
type LocalizedName struct {
Lang string `xml:"xml lang,attr"`
Value string `xml:",chardata"`
}
Lang
属性位于xml
命名空间内。 encoding / xml包中生成的XML包含相对名称空间:
<Organization>
<OrganizationName xmlns:_xml="xml" _xml:lang="en">name</OrganizationName>
<OrganizationDisplayName xmlns:_xml="xml" _xml:lang="en">name</OrganizationDisplayName>
<OrganizationURL xmlns:_xml="xml" _xml:lang="en">http://www.example.com/</OrganizationURL>
</Organization>
我期望元素不使用相对命名空间,因为它们似乎被认为是不安全的,although I do not understand why:
<OrganizationName xml:lang="en">name</OrganizationName>
是什么原因导致创建相对名称空间?
答案 0 :(得分:0)
如果您想生成这样的内容:
<OrganizationName xml:lang="en">name</OrganizationName>
您可以使用以下内容:
package main
import (
"encoding/xml"
"fmt"
)
//OrganizationName Name
type OrganizationName struct {
XMLName xml.Name `xml:"OrganizationName"`
Lang string `xml:"http://www.w3.org/XML/1998/namespace lang,attr,omitempty"`
Value string `xml:",chardata"`
}
//Organization Organization Entity
type Organization struct {
XMLName xml.Name `xml:"Organization"`
OrganizationName OrganizationName `xml:"OrganizationName"`
}
func main() {
v := Organization{
OrganizationName: OrganizationName{
Lang: "en",
Value: "Hisham Karam",
},
}
output, err := xml.MarshalIndent(v, " ", " ")
if err != nil {
fmt.Printf("error: %v\n", err)
}
fmt.Printf("\n%s", string(output))
}
输出:
<Organization>
<OrganizationName xml:lang="en">Hisham Karam</OrganizationName>
</Organization>
转到版本:
go version go1.10.3 darwin/amd64