第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

解組多個 XML 項

解組多個 XML 項

Go
天涯盡頭無女友 2021-12-07 09:29:03
我試圖解組包含在具有相同結(jié)構(gòu)的節(jié)點中的多個項目以供進一步處理,但似乎無法訪問數(shù)據(jù),我不知道為什么。XML 數(shù)據(jù)的結(jié)構(gòu)如下所示(我正在嘗試訪問所有Item的 :<?xml version="1.0" encoding="ISO-8859-1" ?> <datainfo>  <origin>NOAA/NOS/CO-OPS</origin>  <producttype> Annual Tide Prediction </producttype>  <IntervalType>High/Low Tide Predictions</IntervalType>  <data>    <item>      <date>2015/12/31</date>      <day>Thu</day>      <time>03:21 AM</time>      <predictions_in_ft>5.3</predictions_in_ft>      <predictions_in_cm>162</predictions_in_cm>      <highlow>H</highlow>    </item>    <item>      <date>2015/12/31</date>      <day>Thu</day>      <time>09:24 AM</time>      <predictions_in_ft>2.4</predictions_in_ft>      <predictions_in_cm>73</predictions_in_cm>      <highlow>L</highlow>    </item>  </data></datainfo>我的代碼是:package mainimport (    "encoding/xml"    "fmt"    "io/ioutil"    "os")// TideData stores a series of tide predictionstype TideData struct {    Tides []Tide `xml:"data>item"`}// Tide stores a single tide predictiontype Tide struct {    Date         string  `xml:"date"`    Day          string  `xml:"day"`    Time         string  `xml:"time"`    PredictionFt float64 `xml:"predictions_in_ft"`    PredictionCm float64 `xml:"predictions_in_cm"`    HighLow      string  `xml:"highlow"`}func (t Tide) String() string {    return t.Date + " " + t.Day + " " + t.Time + " " + t.HighLow}func main() {    xmlFile, err := os.Open("9414275 Annual.xml")    if err != nil {        fmt.Println("Error opening file:", err)        return    }    defer xmlFile.Close()    b, _ := ioutil.ReadAll(xmlFile)    var tides TideData    xml.Unmarshal(b, &tides)    fmt.Println(tides)    for _, datum := range tides.Tides {        fmt.Printf("\t%s\n", datum)    }}運行時輸出為空,這讓我認為數(shù)據(jù)沒有被解組。輸出是:{[]}
查看完整描述

1 回答

?
慕的地6264312

TA貢獻1817條經(jīng)驗 獲得超6個贊

您忽略了從xml.Unmarshal. 通過稍微修改您的程序,我們可以看到發(fā)生了什么:


xml: encoding "ISO-8859-1" declared but Decoder.CharsetReader is nil

而在文檔中閑逛,我們發(fā)現(xiàn),在默認情況下的包只支持XML的UTF-8編碼:


    // CharsetReader, if non-nil, defines a function to generate

    // charset-conversion readers, converting from the provided

    // non-UTF-8 charset into UTF-8. If CharsetReader is nil or

    // returns an error, parsing stops with an error. One of the

    // the CharsetReader's result values must be non-nil.

    CharsetReader func(charset string, input io.Reader) (io.Reader, error)

因此,您似乎需要提供自己的字符集轉(zhuǎn)換例程。您可以通過像這樣修改代碼來注入它:


decoder := xml.NewDecoder(xmlFile)

decoder.CharsetReader = makeCharsetReader

err := decoder.Decode(&tides)

(請注意,我們現(xiàn)在正在從一個io.Reader而不是字節(jié)數(shù)組解碼,因此ReadAll可以刪除邏輯)。該golang.org/x/text/encoding套餐的家庭可能會幫助您實施makeCharsetReader功能。像這樣的事情可能會奏效:


import "golang.org/x/text/encoding/charmap"


func makeCharsetReader(charset string, input io.Reader) (io.Reader, error) {

    if charset == "ISO-8859-1" {

        // Windows-1252 is a superset of ISO-8859-1, so should do here

        return charmap.Windows1252.NewDecoder().Reader(input), nil

    }

    return nil, fmt.Errorf("Unknown charset: %s", charset)

}

然后您應(yīng)該能夠解碼 XML。


查看完整回答
反對 回復(fù) 2021-12-07
  • 1 回答
  • 0 關(guān)注
  • 169 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號