2017-09-07 3 views
0

文字列のスライス["13.64.196.27/32"、 "13.64.198.19/32"]に非整列化するXMLデータがありますが、エラー "undefined:Product"がすべての冒頭に表示されます。私はProduct構造体を定義しています...それが私に何を望んでいるかわかりません。アンマーシャリングする方法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を使用しようとしている、以下を参照してくださいとplay.golang.org/p/Ak6bx3BLwq。

私は願って、少し修正したことができます:

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 [{{アドレスリスト} IPv4の[ ]}]}]}?私は "13.64.196.27/32"、 "13.64.198.19/32"の内部にあると期待しています – irom

+1

'関数の実装から変数を定義する必要があります' - >関数内で名前付きの型を定義することは有効です。特に、コード内の他の場所でこれらの型を必要としないことがあるためです。 – Carpetsmoker

+1

@Carpetsmokerそれは良い考えです。私はもっ​​と頻繁にそれをする必要があります。私のコードの中には、SQLから返された部分的なビューを散らばっているものがあります。つまり、他の場所で同じ構造体Nameを使用しようとしないようにしてください。そうしないと、実際に混乱することになります。 – RayfenWindspear

関連する問題