2017-09-07 21 views
0

我有xml数据解组成字符串[“13.64.196.27/32”,“13.64.198.19/32”],但得到错误“undefined:产品”在它的一开始。我有产品结构定义...不知道它对我的要求。见下文和play.golang.org/p/Ak6bx3BLwq如何unmarshal Go xml?

func main() { 
    data := `<products updated="9/1/2017"> 
<product name="o365"> 
<addresslist type="IPv4"> 
<address>13.64.196.27/32</address> 
<address>13.64.198.19/32</address> 
</addresslist> 
</product> 
</products>` 

    type Azure struct { 
     XMLName xml.Name `xml:"products"` 
     Products []Product `xml:"product"` 
    } 

    type Product struct { 
     XMLName xml.Name `xml:"product"` 
     Name string `xml:"name,attr"` 
     List []List `xml:"addresslist"` 
    } 

    type List struct { 
     XMLName xml.Name `xml:"addresslist"` 
     Type string `xml:"type,attr"` 
     Address []string `xml:"addressList>address"` 
    } 

    var products Azure 
    xml.Unmarshal([]byte(data), &products) 
    fmt.PrintLn(products.List.Address) 
} 

回答

2

首先要定义变量输出功能的实现;其次,你要使用fmt.PrintLn不存在。

,我已经修复了一下,希望它有助于:

package main 

import (
    "fmt" 
    "encoding/xml" 
) 

type Azure struct { 
    XMLName xml.Name `xml:"products"` 
    Products []Product `xml:"product"` 
} 

type Product struct { 
    XMLName xml.Name `xml:"product"` 
    Name string `xml:"name,attr"` 
    List []List `xml:"addresslist"` 
} 

type List struct { 
    XMLName xml.Name `xml:"addresslist"` 
    Type string `xml:"type,attr"` 
    Address []string `xml:"addressList>address"` 
} 

func main() { 
    data := `<products updated="9/1/2017"> 
<product name="o365"> 
<addresslist type="IPv4"> 
<address>13.64.196.27/32</address> 
<address>13.64.198.19/32</address> 
</addresslist> 
</product> 
</products>` 

    var products Azure 
    xml.Unmarshal([]byte(data), &products) 
    fmt.Println(products) 
} 
+0

日Thnx了很多,你知道为什么它打印空片{{产品} {{}产品O365 [{{} AddressList中的IPv4 [ ]}]}]}?我期望“13.64.196.27/32”,“13.64.198.19/32”在 – irom

+1

里面'你应该定义变量出函数实现' - >定义函数内的命名类型是有效的,有时特别是对于解组的东西IMHO,因为你有时从不需要代码中其他任何地方的类型。 – Carpetsmoker

+1

@Carpetsmoker这是一个好主意。我需要更频繁地这样做。我的一些代码充斥着从SQL返回的部分视图,这些视图在其他地方没有任何用处,但却使整个包变得混乱。也就是说,确保你不要尝试在别处使用相同的struct Name,否则事情会变得非常混乱。 – RayfenWindspear