You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Golang encoding/xml编码嵌套结构体

解决Golang encoding/xml生成嵌套结构XML的问题

你当前的结构体定义没有包含目标XML里的<Types>节点,且层级可以简化。以下是调整后的实现方案:

简化版结构体定义

利用XML标签的parent>child语法,可以直接在根结构体里指定层级关系,减少结构体嵌套:

package main

import (
    "encoding/xml"
    "fmt"
    "os"
)

type Request struct {
    XMLName xml.Name `xml:"Request"`
    // 用`Types>Type`标签表示这些Type节点属于Types节点的子节点
    TypeList []TypeNode `xml:"Types>Type"`
}

type TypeNode struct {
    // 每个Type节点内部的Type文本节点
    Type string `xml:"Type"`
}

构造数据并编码

func main() {
    // 构造请求数据
    req := Request{
        TypeList: []TypeNode{
            {Type: "Type1"},
            {Type: "Type2"},
            // 可以添加更多Type节点
        },
    }

    // MarshalIndent生成带缩进的XML,更易读
    output, err := xml.MarshalIndent(req, "", "    ")
    if err != nil {
        fmt.Printf("编码XML失败: %v\n", err)
        os.Exit(1)
    }

    // 加上XML声明头并输出
    fmt.Println(xml.Header + string(output))
}

输出结果

运行后会生成你期望的XML格式:

<?xml version="1.0" encoding="UTF-8"?>
<Request>
    <Types>
        <Type>
            <Type>Type1</Type>
        </Type>
        <Type>
            <Type>Type2</Type>
        </Type>
    </Types>
</Request>

另一种拆分结构体的方案

如果你更喜欢明确的层级拆分,也可以把Types单独定义为结构体:

type Request struct {
    XMLName xml.Name `xml:"Request"`
    Types   Types    `xml:"Types"`
}

type Types struct {
    TypeNodes []TypeNode `xml:"Type"`
}

type TypeNode struct {
    Type string `xml:"Type"`
}

构造数据时只需调整为:

req := Request{
    Types: Types{
        TypeNodes: []TypeNode{
            {Type: "Type1"},
            {Type: "Type2"},
        },
    },
}

编码逻辑和输出结果完全一致。

内容的提问来源于stack exchange,提问作者an nguyen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 12:05:32