使用Unmarshal在Go中获取XML名称空间前缀

yageek:

我想知道是否可以使用中的Unmarshal方法获取XML名称空间前缀encoding/xml

例如,我有:

<application xmlns="http://wadl.dev.java.net/2009/02" xmlns:xs="http://www.w3.org/2001/XMLSchema">
</application>

我想知道如何检索xsXMLSchema 定义前缀,而不必使用该Token方法。

Ainar-G:

就像其他所有属性一样获得它:

type App struct {
    XS string `xml:"xs,attr"`
}

游乐场:http : //play.golang.org/p/2IOmkX1Jov

如果您还具有实际xs属性sans,它将变得更加棘手xmlns即使将名称空间URI添加到XS的标签中,也可能会出现错误

编辑:如果要获取所有声明的名称空间,则可以UnmarshalXML在元素上定义一个自定义并扫描其属性:

type App struct {
    Namespaces map[string]string
    Foo        int `xml:"foo"`
}

func (a *App) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
    a.Namespaces = map[string]string{}
    for _, attr := range start.Attr {
        if attr.Name.Space == "xmlns" {
            a.Namespaces[attr.Name.Local] = attr.Value
        }
    }

    // Go on with unmarshalling.
    type app App
    aa := (*app)(a)
    return d.DecodeElement(aa, &start)
}

游乐场:http : //play.golang.org/p/u4RJBG3_jW

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何获取样式表中定义的名称空间前缀,而不是从输入XML中获取

如何通过前缀获取xml文件的名称空间(常规)

使用根元素语法中的名称空间前缀解析XML-Java

使用XQuery检查是否在整个文件中重新定义了XML文档的名称空间前缀

XML中是否可以有多个名称空间前缀?

在Java DOM中创建以名称空间为前缀的XML节点

在xml消息中插入几个带前缀的名称空间

更改使用JAXWS生成的默认XML名称空间前缀

如何使用XSLT删除特定xml元素的名称空间前缀?

如何使用Xstream从xml删除名称空间前缀?

Android使用名称空间作为库中属性的前缀

XML名称空间前缀冲突的XPath行为

使用Google Apps脚本在XML中设置命名空间前缀

如何使用XSLT替换XML中的前缀和命名空间

在Eclipse的XHTML + XML文件中搜索并替换XML名称空间前缀

使用名称空间和Python(lxml)从XML获取XML属性

如何在JAVA中编码默认名称空间和带有单个XML元素前缀的名称空间

使用sed删除名称空间前缀

重写XMLDocument以使用名称空间前缀

在Go中解析XML时处理名称空间

在Go中使用unmarshal无法访问命名空间的XML属性

在具有名称空间前缀的元素内创建不带名称空间前缀的XML元素

如何在 PHP Xpath 中获取带有命名空间前缀的元素名称

如何在Java中使用DOM获取目标名称空间及其前缀?

在PowerShell中创建从父节点继承名称空间前缀的XML元素

使用lxml解析xml时,在标签中保留名称空间前缀

如何在不带前缀的情况下使用某些XML名称空间标签?

为什么此解析器找不到使用名称空间前缀的XML标记的内容?

如何在PHP中使用SimpleXMLElement生成以名称空间为前缀的xml元素