我有一個嵌套結構陣列的結構,格式如下,我已經提升了結構陣列URL中的 News 結構
我的 RSS 提要是:https ://foreignpolicy.com/feed/
這是我用來從我的 RSS 提要 XML 生成 Go 結構到 Go 結構的工具
type Rss struct {
XMLName xml.Name `xml:"rss"`
Channel struct {
URL []struct {
News
} `xml:"item"`
} `xml:"channel"`
}
type News struct {
Loc string `xml:"link"`
Publishdate string `xml:"pubDate"`
Title string `xml:"title"`
Summary string `xml:"description"`
}
這是Goplayround 推廣 News 結構
我想進一步推廣 Channel 中的所有內容,以便我可以直接從最頂層的Rss結構訪問News結構中的專案:
type Rss struct {
XMLName xml.Name `xml:"rss"`
Channel --> seem NOT working ?
}
type Channel struct {
URL []struct {
News
}
}
type News struct {
Loc string `xml:"channel>item>link"` ---> is it the right xml tag ?
Publishdate string `xml:"pubDate"` ---> or this is the right xml tag ?
Title string `xml:"title"`
Summary string `xml:"description"`
}
所以我可以列印如下:
var URLset Rss
if xmlBytes, err := getXML(url); err != nil {
fmt.Printf("Failed to get XML: %v", err)
} else {
xml.Unmarshal(xmlBytes, &URLset)
}
/************************** XML parser *************************/
for _, URLElement := range **URLset.URL** {
fmt.Println("URLElement:", URLElement)
fmt.Println(
"[Element]:",
"\nTitle #", URLElement.Title,
"\nPublicationDate #", URLElement.Publishdate,
"\nSummary#", URLElement.Summary,
"\nLoc #", URLElement.Loc,
"\n")
}
但似乎什么都沒有列印 Goplayground 推廣頻道
uj5u.com熱心網友回復:
你可以做
URL []struct { News } `xml:"channel>item"`
并channel>item從Loc標簽中洗掉。
News型別的嵌入[]struct{ }似乎是多余的。所以你可以改為
URL []News `xml:"channel>item"`
你會得到同樣的結果。
我建議您使用與 XML 元素名稱匹配的名稱,即Item代替News和Items代替URL.
Items []Item `xml:"channel>item"`
https://go.dev/play/p/1Ig7wtxckqJ
in struct 標簽上的xml.Unmarshal檔案說明了以下內容:>
如果 XML 元素包含一個名稱與格式為“a”或“a>b>c”的標記前綴匹配的子元素,則 unmarshal 將進入 XML 結構中查找具有給定名稱的元素,并將映射該結構欄位的最里面的元素。以“>”開頭的標記等效于以欄位名稱開頭后跟“>”的標記。
https://pkg.go.dev/encoding/[email protected]#Unmarshal
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/480234.html
上一篇:如何有效地自定義展平地圖
