xml - 具有不同属性的相同 XML 标记的不同结构

标签 xml struct go

假设我有这个 XML:

<something>
  <value type="item">
    ...
  </value>
  <value type="other">
    ...
  </value>
</something>

我能否以某种方式将具有不同属性的值提取到我的结构中的不同项目,例如:

type Something struct {
  Item  Item  `xml:"value[type=item]"` // metacode
  Other Other `xml:"value[type=other]"`
}

这可能吗?我应该使用什么作为 xml: 属性?

最佳答案

我认为不可能直接将按属性值区分的项目列表映射到特定字段。您需要将其映射到一个 slice ,如以下示例(Items slice ):

package main

import (
    "encoding/xml"
    "fmt"
)

func main() {

    type Item struct {
        Type string `xml:"type,attr"`
        Value string `xml:",chardata"`
    }

    type Something struct {
        XMLName xml.Name `xml:"something"`
        Name string `xml:"name"`
        Items []Item `xml:"value"`
    }

    var v Something

    data := `
    <something>
        <name> toto </name>
        <value type="item"> my item </value>
        <value type="other"> my other value </value>
    </something>
    `
    err := xml.Unmarshal([]byte(data), &v)
    if err != nil {
        fmt.Printf("error: %v", err)
        return
    }

    fmt.Println(v)
}

由您在解码后处理 slice 以提取值并在需要时将它们放入特定字段。

关于xml - 具有不同属性的相同 XML 标记的不同结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28311908/

相关文章:

c - 使用 Structs 在 C 中模拟类

go - panic 堆栈跟踪中的未知字段

go - 在 Go 中封装结构

android - 不使用 XML 构建 Android 应用程序

Android 无法解析符号 OnRequestPermissionsResultCallback

java - Servlet 接收基于 XML 的请求,然后创建一个新的 XML 文件作为响应发回

c - 在c中将int结构数据类型写入文件

python - 将 XML 文件内容发送到事件中心并从 Databricks 读取它

C++ 和结构(多重继承)

go - 在 golang 中为 ws 创建单元测试