Golang的Xml Unmarshal,没有值

huangapple go评论81阅读模式
英文:

Golang Xml Unmarshal, No value

问题

类型VastHtml结构体定义了一个VAST广告的HTML表示形式。它包含了广告的各种属性和元素,如版本号、广告ID、广告系统、广告标题、描述等等。其中,Creatives字段表示广告的创意部分,包含了多个创意对象,每个创意对象又包含了序列号、创意ID、线性创意、伴随创意等等。线性创意包含了持续时间、跟踪事件、视频点击等信息,伴随创意包含了宽度、高度、静态资源、跟踪事件、伴随点击等信息。此外,还有其他字段如错误信息、展示链接、媒体文件等。

在main函数中,首先通过http.Get方法获取了一个URL返回的HTTP响应。然后使用ioutil.ReadAll方法读取了响应的内容,并将其存储在xmlDataFromHttp变量中。接下来,使用xml.Unmarshal方法将xmlDataFromHttp解析为VastHtml类型的结构体,并将解析结果存储在xmlData变量中。最后,打印了xmlData.VAST的值。

你好,
在对从URL获取的XmlVast进行解组后,我得到的只是结构体,没有任何值。即使我将XmlVast的内容复制到文件中,然后尝试对其进行解组,结果也是相同的,只有结构体而没有任何值。

提前感谢你的帮助。

英文:
type VastHtml struct {
     VAST struct {
             Version string `xml:"version,attr"`
             Ad      struct {
                     Id     string `xml:"id,attr"`
                     InLine struct {
                             AdSystem    string   `xml:"AdSystem"`
                             AdTitle     string   `xml:"AdTitle"`
                             Description string   `xml:"Description"`
                             Error       string   `xml:"Error"`
                             Impression  []string `xml:"Impression"`
                             Creatives   struct {
                                     Creative []struct {
                                             Sequence string `xml:"sequence,attr"`
                                             Id       string `xml:"id,attr"`
                                             Linear   struct {
                                                     Duration       string `xml:"Duration"`
                                                     TrackingEvents struct {
                                                             Tracking []string `xml:"Tracking"`
                                                     } `xml:"TrackingEvents"`
                                                     VideoClicks struct {
                                                             ClickThrough string   `xml:"ClickThrough"`
                                                             CustomClick  []string `xml:"CustomClick"`
                                                     } `xml:"VideoClicks"`
                                                     MediaFiles struct {
                                                             MediaFile []struct {
                                                                     Delivery string `xml:"delivery,attr"`
                                                                     Bitrate  string `xml:"bitrate,attr"`
                                                                     Width    string `xml:"width,attr"`
                                                                     Height   string `xml:"height,attr"`
                                                                     Type     string `xml:"type,attr"`
                                                             } `xml:"MediaFile"`
                                                     } `xml:"MediaFiles"`
                                             } `xml:"Linear"`
                                             CompanionAds struct {
                                                     Companion []struct {
                                                             Width                 string `xml:"width,attr"`
                                                             Height                string `xml:"height,attr"`
                                                             StaticResource        string `xml:"StaticResource"`
                                                             TrackingEvents        string `xml:"TrackingEvents"`
                                                             CompanionClickThrough string `xml:"CompanionClickThrough"`
                                                     } `xml:"Companion"`
                                             } `xml:"CompanionAds"`
                                     } `xml:"Creative"`
                             } `xml:"Creatives"`
                             Extensions string `xml:"Extensions"`
                     } `xml:"InLine"`
             } `xml:"Ad"`
     } `xml:"VAST"`

}

   func main() 
{

 	resp, err := http.Get("http://ad3.liverail.com/?LR_PUBLISHER_ID=1331&LR_CAMPAIGN_ID=229&LR_SCHEMA=vast2")

 	if err != nil {
 		fmt.Println(err)
 		os.Exit(1)
 	}

 	defer resp.Body.Close()

   xmlDataFromHttp, err := ioutil.ReadAll(resp.Body) 

 	if err != nil {
 		fmt.Println(err)
 		os.Exit(1)
 	}
   fmt.Println(os.Stdout, string(xmlDataFromHttp))
  
// read xml http response

   var xmlData VastHtml
   err = xml.Unmarshal(xmlDataFromHttp, &xmlData)
     if err != nil {
           panic(err)
         }

fmt.Printf("XML===>: ", xmlData.VAST)

 }

Hello everone,
after Unmarshaling the XmlVast that I get from an URL that's give just the struct but without any value. even when i copy the content of the XmlVast in a file and I try to Unmarshal it it give me the same responce the struct without any value.

Thank you in advance.

答案1

得分: 3

你正在尝试将一个根元素为<VAST>的XML文档解组为类型为VastHtml的结构体,该结构体的第一个字段是VAST

如果你想要解码为VAST元素,请直接将其传递给Unmarshal函数。

err = xml.Unmarshal(xmlDataFromHttp, &xmlData.VAST)
英文:

You are trying to unmarshal an xml document with a root of <VAST> into a struct of type VastHtml, which contains VAST as its first field.

Pass the VAST element directly to the Unmarshal function if that is what you want to decode into.

err = xml.Unmarshal(xmlDataFromHttp, &xmlData.VAST)

答案2

得分: 3

XML输入在根部分有一个<VAST>元素,对应于您的结构中的VastHtml.VAST字段。因此,将其作为目标值传递给xml.Unmarshal

err = xml.Unmarshal(xmlDataFromHttp, &xmlData.VAST)

(我同意Lander的观点,深层嵌套的结构定义将来可能会成为一个问题)。

英文:

The XML input has a <VAST> element at the root -- this corresponds to the VastHtml.VAST field in your struct. So, pass that to xml.Unmarshal as the target value:

err = xml.Unmarshal(xmlDataFromHttp, &xmlData.VAST)

(I agree with Lander that the deeply-nested struct definition is going to be a problem going forward).

huangapple
  • 本文由 发表于 2015年5月12日 00:37:42
  • 转载请务必保留本文链接:https://go.coder-hub.com/30173086.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定