go xml 解析“看不到”任何字段

我一定遗漏了一些非常明显的东西......我正在尝试解析一个简单的 XML 文件,按照ExampleUnmarshal()这里的示例:http : //golang.org/src/pkg/encoding/xml/example_test.go


正如您将在本文底部看到的,没有任何属性或子元素被映射 - 无论是方向 - Marshal 还是 Unmarshal。据我所知,这几乎与他们在上面的 example_test.go 中所做的完全相同(我能看到的唯一区别是该测试中的类型在函数的范围内 - 我尝试过,没有区别,并且他们使用子元素而不是属性 - 除了id- 但每个文档名称,attr 应该工作 afaict)。


代码如下所示:


package main


import (

    "fmt"

    "encoding/xml"

    "io/ioutil"

)



type String struct {

    XMLName xml.Name `xml:"STRING"`

    lang  string   `xml:"lang,attr"`

    value  string   `xml:"value,attr"`

}


type Entry struct {

    XMLName xml.Name `xml:"ENTRY"`

    id      string  `xml:"id,attr"`

    strings []String 

}


type Dictionary struct {

    XMLName xml.Name `xml:"DICTIONARY"`

    thetype  string   `xml:"type,attr"`

    ignore  string   `xml:"ignore,attr"`

    entries []Entry  

}


func main() {


    dict := Dictionary{}


    b := []byte(`<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<DICTIONARY type="multilanguage" ignore="en">

  <ENTRY id="ActionText.Description.AI_ConfigureChainer">

    <STRING value="ActionText.Description.AI_ConfigureChainer"/>

    <STRING value=""/>

    <STRING value=""/>

    <STRING value=""/>

  </ENTRY>

</DICTIONARY>

`)


    err := xml.Unmarshal(b, &dict)

    if err != nil { panic(err) }


    fmt.Println(dict) // prints: {{ DICTIONARY}   []}


    dict.ignore = "test"


    out, err := xml.MarshalIndent(&dict, "  ", "    ")

    fmt.Println(string(out)) // prints:   <DICTIONARY></DICTIONARY>


    // huh?


}


素胚勾勒不出你
浏览 246回答 1
1回答

森栏

您需要导出(大写)您的结构字段。从encoding/xml&nbsp;Marshall功能文档:结构的 XML 元素包含结构的每个导出字段的编组元素有关相关答案,请参阅无法在 golang 中解析复杂的 json。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go