2015-09-07 65 views
1

我有以下代碼並希望遍歷模板中的主題,但對於我的生活,我似乎無法超越它是嵌套容器的事實。在模板上對golang中的嵌套結構進行迭代

type ThemeList struct { 
    XMLName xml.Name `xml:"Themes"` 
    Themes []Theme `xml:"Theme"` 
} 

type Theme struct { 
    XMLName xml.Name `xml:"Theme"` 
    Name string `xml:"Name,attr"` 
    Page string `xml:"Page,attr"` 
    Tag string `xml:"Tag,attr"` 
    Day string `xml:"Day,attr"` 
} 

// Fetch the current XML document and return the Themelist[] 
func openXML(filename string) ThemeList { 

    xmlFile, _ := os.Open(filename) 
    defer xmlFile.Close() 
    XMLdata, _ := ioutil.ReadAll(xmlFile) 

    var t ThemeList 
    xml.Unmarshal(XMLdata, &t) 

    return t 
} 

如何將一個輸出這些在{{範圍}}其中每個主題是一個單獨的列表項的一部分?輸出將在模板中使用.Name .Tag等等,當我看着它們時。

+0

也許我並不需要在整個結構的主題在這裏通過,因爲它僅僅是題材的容器?這只是因爲傳入xml的結構才需要。 – sed

回答

1

使用下面的模板:

<ul>{{range .Themes}} 
    <li>{{.Name}} {{.Tag}}{{end}} 
</ul> 

,並與數據參數作爲一個*ThemeList執行它。

Playground Example

+0

謝謝!我還發現,我只能傳遞底層的[]主題集合。我看到你基本上使用範圍指標中的.mes來做同樣的事情。 – sed

+0

爲什麼你會在這裏使用一個指針,而只是複製變量?我相信你知道一個很好的理由,但我只是從這裏開始並希望更好地理解。 – sed