golang无法修改xml节点值?

我无法在 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中设置一些节点值?


慕尼黑的夜晚无繁华
浏览 168回答 1
1回答

HUH函数

这是一个工作示例(使用 XML 标识):Playground解释:您正在 for 循环中复制结构。写作时for&nbsp;_,&nbsp;r&nbsp;:=&nbsp;range&nbsp;v.Row&nbsp;{r是中值的副本v.Row。如果您随后尝试更改该值,您只会更改副本,但原始值不会更改。你应该像这样写你的循环for&nbsp;i&nbsp;:=&nbsp;range&nbsp;v.Row&nbsp;{并v.Row[i]改为访问结构。这同样适用于您的内部循环,它应该这样写:for&nbsp;j&nbsp;:=&nbsp;range&nbsp;v.Row[i].C&nbsp;{然后你可以改变列v.Row[i].C[j].V&nbsp;=&nbsp;"25"(可选)您可以通过写入获取对列的引用c := &v.Row[i].C[j],然后将值更改为c.V = "25"
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go