dongmanzui8486 2017-08-19 10: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-17 07: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
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 ogg dd trandata 报错
  • ¥15 高缺失率数据如何选择填充方式
  • ¥50 potsgresql15备份问题
  • ¥15 Mac系统vs code使用phpstudy如何配置debug来调试php
  • ¥15 目前主流的音乐软件,像网易云音乐,QQ音乐他们的前端和后台部分是用的什么技术实现的?求解!
  • ¥60 pb数据库修改与连接
  • ¥15 spss统计中二分类变量和有序变量的相关性分析可以用kendall相关分析吗?
  • ¥15 拟通过pc下指令到安卓系统,如果追求响应速度,尽可能无延迟,是不是用安卓模拟器会优于实体的安卓手机?如果是,可以快多少毫秒?
  • ¥20 神经网络Sequential name=sequential, built=False
  • ¥16 Qphython 用xlrd读取excel报错