dongmanzui8486 2017-08-19 02:26
浏览 80
已采纳

具有XML名称空间的属性

The following struct is used to marshall SAML XML elements such as OrganizationName, OrganizationDisplayName & OrganizationURL.

type LocalizedName struct {
    Lang  string `xml:"xml lang,attr"`
    Value string `xml:",chardata"`
}

The Lang attribute is within the xml namespace. The generated XML from the encoding/xml package includes relative namespaces:

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

I was expecting the elements to not use relative namespaces as they seem to be considered to be insecure, although I do not understand why:

<OrganizationName xml:lang="en">name</OrganizationName>

What causes the relative namespaces to be created?

  • 写回答

1条回答 默认 最新

  • dousi4900 2018-09-16 23:29
    关注

    if you want to generate something like this:

    <OrganizationName xml:lang="en">name</OrganizationName>
    

    you can use the following:

    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
    ", err)
        }
        fmt.Printf("
    %s", string(output))
    
    }
    

    output:

      <Organization>
          <OrganizationName xml:lang="en">Hisham Karam</OrganizationName>
      </Organization>
    

    go version:

    go version go1.10.3 darwin/amd64
    

    展开全部

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
编辑
预览

报告相同问题?

手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部