package pkg import ( "bytes" "fmt" ) // XmlRequest 定义请求结构 type XmlRequest struct { Action string `xml:"action"` UserName string `xml:"userName"` ExtraFields map[string]interface{} `xml:"-"` // 忽略此字段,手动处理 } // MarshalToXML 将XmlRequest转换为指定格式的XML字节流 func (req XmlRequest) MarshalToXML() ([]byte, error) { var buf bytes.Buffer // 写入XML声明 buf.WriteString(`` + "\n") buf.WriteString("\n") // 写入基本字段 buf.WriteString(fmt.Sprintf("%s\n", req.Action)) buf.WriteString(fmt.Sprintf("%s\n", req.UserName)) // 处理ExtraFields for key, value := range req.ExtraFields { switch v := value.(type) { case string: // 空字符串特殊处理(根据示例输出,有些空字段也需要输出) buf.WriteString(fmt.Sprintf("<%s>%s\n", key, v, key)) case []map[string]interface{}: // 处理列表数据 buf.WriteString(fmt.Sprintf("\n", key)) for _, row := range v { buf.WriteString("\n") for rowKey, rowValue := range row { buf.WriteString(fmt.Sprintf("<%s>%v\n", rowKey, rowValue, rowKey)) } buf.WriteString("\n") } buf.WriteString("\n") // 可以根据需要添加其他类型的处理 } } buf.WriteString("") return buf.Bytes(), nil }