为了账号安全,请及时绑定邮箱和手机立即绑定

golang无法修改xml节点值?

golang无法修改xml节点值?

Go
慕尼黑的夜晚无繁华 2021-09-13 09:48:54
我无法在 golang 中修改 c 节点的值。我想获取一些节点值(可以),并将一些节点值(例如在“”之间)重置为以下值,但是它有一些问题。怎么做?欢迎您提供帮助:    package main    import (            "fmt"            "regexp"    )    type C struct {        XMLName xml.Name `xml:"c"`        V       string   `xml:"v,omitempty"`        R       string   `xml:"r,attr"`        T       string   `xml:"t,attr,omitempty"`        S       string   `xml:"s,attr"`    }    type Row struct {        XMLName xml.Name `xml:"row"`        R       string   `xml:"r,attr"`        C       []C      `xml:"c"`        Spans   string   `xml:"spans,attr"`    }    type Result struct {        XMLName xml.Name `xml:"sheetData"`        Row     []Row    `xml:"row"`    }    func main() {            input := `            <sheetData>            <row r="2" spans="1:15">            <c r="A2" s="5" ><v>{{range .txt}}</v></c>            <c r="B2" s="5" t="s"><v>1</v></c>            <c r="C2" s="5" t="s"><v>2</v></c>            <c r="D2" s="5" t="s"><v>3</v></c>            <c r="E2" s="5" />            <c r="K2" s="6" t="s"><v>21</v></c>        </row>         <row r="3" spans="1:15">            <c r="A3" s="5" t="s"><v>0</v></c>            <c r="B3" s="5" t="s"><v>1</v></c>            <c r="C3" s="5" t="s"><v>2</v></c>            <c r="D3" s="5" t="s"><v>3</v></c>            <c r="E3" s="5" />            <c r="K3" s="6" t="s"><v>21</v></c>        </row>         </sheetData>`        v := Result{}    err := xml.Unmarshal([]byte(input), &v)    if err != nil {        fmt.Printf("error: %v", err)        return    }    for _, r := range v.Row {        for _, c := range r.C {                    c.V="25"          //i want the set some c node value.              fmt.Printf("%v %v %v\n", c.V, c.R,c.T)        }    }        output, err := xml.MarshalIndent(&v, "", "")         if  err != nil {            fmt.Printf("error: %v\n", err)        }              fmt.Println(string(output))   //but the c node value is still original}                  }  以上有什么问题?如何在golang中设置一些节点值?
查看完整描述

1 回答

?
HUH函数

TA贡献1836条经验 获得超4个赞

这是一个工作示例(使用 XML 标识):Playground

解释:

您正在 for 循环中复制结构。写作时

for _, r := range v.Row {

r是中值的副本v.Row。如果您随后尝试更改该值,您只会更改副本,但原始值不会更改。

你应该像这样写你的循环

for i := range v.Row {

v.Row[i]改为访问结构。

这同样适用于您的内部循环,它应该这样写:

for j := range v.Row[i].C {

然后你可以改变列

v.Row[i].C[j].V = "25"

(可选)您可以通过写入获取对列的引用c := &v.Row[i].C[j],然后将值更改为c.V = "25"


查看完整回答
反对 回复 2021-09-13
  • 1 回答
  • 0 关注
  • 167 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信