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

為了賬號(hào)安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

解組多個(gè) XML 項(xiàng)

解組多個(gè) XML 項(xiàng)

Go
天涯盡頭無女友 2021-12-07 09:29:03
我試圖解組包含在具有相同結(jié)構(gòu)的節(jié)點(diǎn)中的多個(gè)項(xiàng)目以供進(jìn)一步處理,但似乎無法訪問數(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)    }}運(yùn)行時(shí)輸出為空,這讓我認(rèn)為數(shù)據(jù)沒有被解組。輸出是:{[]}
查看完整描述

1 回答

?
慕的地6264312

TA貢獻(xiàn)1817條經(jīng)驗(yàn) 獲得超6個(gè)贊

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


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

而在文檔中閑逛,我們發(fā)現(xiàn),在默認(rè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)在正在從一個(gè)io.Reader而不是字節(jié)數(shù)組解碼,因此ReadAll可以刪除邏輯)。該golang.org/x/text/encoding套餐的家庭可能會(huì)幫助您實(shí)施makeCharsetReader功能。像這樣的事情可能會(huì)奏效:


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)注
  • 156 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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