当前位置: 首页 > 面试题库 >

Golang-解组额外的XML属性

梁丘逸仙
2023-03-14
问题内容

有没有一种方法可以解组具有动态属性的XML标签(我不知道每次都会获得哪些属性)。

也许尚不支持。请参阅问题3633:encoding /
xml:支持收集所有属性

就像是 :

package main

import (
    "encoding/xml"
    "fmt"
)

func main() {
    var v struct {
        Attributes []xml.Attr `xml:",any"`
    }

    data := `<TAG ATTR1="VALUE1" ATTR2="VALUE2" />`

    err := xml.Unmarshal([]byte(data), &v)
    if err != nil {
        panic(err)
    }
    fmt.Println(v)
}

问题答案:

您需要实现自己的XMLUnmarshaler

package main

import (
    "encoding/xml"
    "fmt"
)

type CustomTag struct {
    Name       string
    Attributes []xml.Attr
}

func (c *CustomTag) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
    c.Name = start.Name.Local
    c.Attributes = start.Attr
    return d.Skip()
}

func main() {
    v := &CustomTag{}

    data := []byte(`<tag ATTR1="VALUE1" ATTR2="VALUE2" />`)

    err := xml.Unmarshal(data, &v)
    if err != nil {
        panic(err)
    }
    fmt.Printf("%+v\n", v)
}

输出

&{Name:tag Attributes:[{Name:{Space: Local:ATTR1} Value:VALUE1} {Name:{Space: Local:ATTR2} Value:VALUE2}]}

http://play.golang.org/p/9ZrpIT32o_



 类似资料:
  • 问题内容: 我有这样的XML结构: 我不知道如何收集SubItemField元素的值和属性,我的代码是这样的: 我需要属性和值,但是获取我知道的值的唯一方法就是使用 而不是我的自定义类型。我正在使用xml.Unmarshal btw。 任何想法? 谢谢。 问题答案: 我想出了如何做到这一点,我只需要在结构中添加一个匹配的新属性即可,如下所示: 我希望这可以帮助某人,因为没有相关文档或示例。

  • 问题内容: 我正在使用的某些SVG / XML文件的属性名称中带有破折号和冒号-例如: 我正在尝试弄清楚如何使用的软件包对这些属性进行编组。虽然虚线属性有效,但带有冒号的属性不起作用: [ 请参阅此处的实时示例 ] 这些似乎是法律属性名称;任何想法如何提取一个?谢谢。 问题答案: 您的示例片段不太正确,因为它不包含前缀的XML名称空间绑定。您可能想要的是: 您可以使用名称空间URL解组此属性: 这

  • 问题内容: 场景:我正在尝试解析一个XML结构,但我不知道如何在xml属性值包含文本和更多嵌套值的情况下建立结构。所有其他属性都已正确设置,我不确定是否需要获取源的值并创建一个单独的解析器来检索元素的值。 编辑: 我正在尝试将源解析为以下形式的字符串:你好%{first_name}%{last_name} 用当前结构解组xml字符串将返回一个空结构 使用innerxml的@plato将源设置为:

  • 问题内容: 我正在尝试提供获取JSON或XML响应的选项。 JSON可以正常工作,但是当我查看XML时,出现错误。 http://lmsapi.com/?api_key=fba9e59d7af86b239e82581780ff987e&format=json http://lmsapi.com/?api_key=fba9e59d7af86b239e82581780ff987e&format=xml

  • 问题内容: 我想通过串联字符串过滤某些数据库对象。 正常的SQL查询为: 在模型中,我创建了一个名为PersonObjects的管理器: 我也在我的模型中配置了这个: 现在,访问fullName可用于单个对象: 但这在过滤器中不起作用: 这是错误还是功能?我怎样才能解决这个问题? 谢谢。 问题答案: 这不是错误。仅检查模型定义,因此不会将其识别为已声明的字段(因为它不是-这是查询中的额外参数)。

  • 问题内容: 我试图将对象内的数据编组为基于已定义架构的xml文件。但是,当我打印出xml文件时,我会在xml标签上收到额外的注释。有什么办法摆脱多余的命名空间注释(即ns2) 这是我从编组中收到的xml的示例。 我想要的是这样的: 这是我的Java代码正在做的事情: 任何帮助深表感谢!谢谢! 问题答案: 通过向用于构造JAXB元素的名称空间添加URI名称空间URI(“ http://www.som