亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

解析 xml 后零輸出

解析 xml 后零輸出

Go
喵喵時光機 2022-08-15 16:24:18
我在 Go 中解析 xml 時遇到問題。一個只有一個“游戲”的 xml 示例:<root><game><id>z0046-54</id><creation_time>1612988348</creation_time><black>aivo</black><white>gosha</white><turn_color>white</turn_color><board>h8 h9 i6 i8 j6 g9 j9 j7 k6 l6 g10 k7 l7 i10 i9 g6 j10 k11 j5 i4 k4 l3 h5 m5 j8 j11 g8 h7 i7 l5 k9 h6 m7 k12 l13 n6 m8 n9 m9</board><moves>h8 swap h9 i6 swap i8 swap j6 g9 j9 j7 k6 l6 g10 k7 l7 i10 i9 g6 j10 k11 j5 i4 k4 l3 h5 m5 j8 j11 g8 h7 i7 l5 k9 h6 m7 k12 l13 n6 m8 n9 m9</moves><alt5></alt5><proposition></proposition><proposer></proposer><status>finished</status><rule>taraguchi10</rule><time>7776000</time><tpm>2592000</tpm><start_time>1612988348</start_time><end_time>1613736768</end_time><winner>black</winner><winby>resign</winby><time_left_black>7536372</time_left_black><time_left_white>7267413</time_left_white><tid>z0046</tid></game></root>我想從 xml 獲取游戲切片。帶有游戲和所有文件結構的代碼:package datatype ro struct {    RoGames []roGame `xml:"root>game"`}type roGame struct {    Id     int    `xml:"game>id"`    Black  string `xml:"game>black"`    White  string `xml:"game>white"`    Moves  string `xml:"game>moves"`    Alt5   string `xml:"game>alt_5"`    Rule   string `xml:"game>rule"`    Winner string `xml:"game>winner"`}另一個文件:package dataimport (    "encoding/xml"    "fmt"    "io/ioutil"    "os")func Xml() {    xmlFile, err := os.Open("data.xml")    if err != nil {        panic(err)    }    fmt.Println("Successfully Opened xml")    defer xmlFile.Close()    inBytes, err := ioutil.ReadAll(xmlFile)    if err != nil {        panic(err)    }    var ro ro    xml.Unmarshal(inBytes, &ro)    fmt.Println(ro)}我從主包調用“Xml”函數并獲取此輸出:Successfully Opened xml{[]}我認為解析過程是可以的,這是sctructs的問題。
查看完整描述

1 回答

?
MYYA

TA貢獻1868條經驗 獲得超4個贊

結構中的 結構標記包含 ,但它似乎不需要。如果將其更改為 ,則解析似乎執行正確的操作:RoGamesrorootgame


type ro struct {

    RoGames []roGame `xml:"game"`

}

而且,由于您已經“進入”標記,因此無需將其添加到結構的每個字段。gameroGame


需要注意的另一件事是,您應該在解析時處理所有錯誤,因為使用上面的修復程序會發生新的錯誤。只有在調整解析器代碼時才注意到它:


var ro ro

err = xml.Unmarshal(inBytes, &ro)

if err != nil {

    panic(err)

}

首先,這會輸出以下內容:


panic: strconv.ParseInt: parsing "z0046-54": invalid syntax

這是因為結構定義中的字段是 一個 ,但它的數據是 ,它不能被解釋為整數。Idintz0046-54


因此,如果我們改變它,我們將為您的結構獲得以下結果:roGame


type roGame struct {

    Id     string `xml:"id"` // <-- Change is here

    Black  string `xml:"black"`

    White  string `xml:"white"`

    Moves  string `xml:"moves"`

    Alt5   string `xml:"alt_5"`

    Rule   string `xml:"rule"`

    Winner string `xml:"winner"`

}

現在,代碼以有用的格式輸出數據。您還可以使用這樣的工具來生成結構,這樣可以使其更容易并且不易出錯。


查看完整回答
反對 回復 2022-08-15
  • 1 回答
  • 0 關注
  • 92 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號