2016-04-28 18 views
0

私はかなり新しいです。私はXML文書から属性値を抽出するのに問題があります。GOでXML属性を解析する

私の仮定は、それはタグ付けを使用する方法に来るとき、私は何かが欠けていますということです「「:: アプリケーション名を」」::

アプリケーションIDと私は本当に感謝:以下のコードは、次の出力を生成しますもし誰かが正しい方向に私を指すことができればそれ。あなたはApp構造体のapp_idapp_nameは大文字で始める必要があることを意味する「エクスポート」のフィールドを、持っている必要があり要素を取得することができるようにするために

data:=`<?xml version="1.0" encoding="UTF-8"?> 
    <applist> 
     <app app_id="1234" app_name="abc"/> 
    <app app_id="5678" app_name="def"/> 
    </applist> ` 

type App struct { 
    app_id string `xml:"app_id,attr"` 
    app_name string `xml:"app_name"` 
} 

type AppList struct { 
    XMLName xml.Name `xml:"applist"` 
    Apps []App  `xml:"app"` 
} 

var portfolio AppList 
err := xml.Unmarshal([]byte(data), &portfolio) 
if err != nil { 
    fmt.Printf("error: %v", err) 
    return 
} 
fmt.Printf("application ID:: %q\n", portfolio.Apps[0].app_id) 
fmt.Printf("application name:: %q\n", portfolio.Apps[0].app_name) 

答えて

4

。また、app_nameフィールドにはxmlフィールドタグに,attrもありません。あなたのコードの実際の例は下記を参照してください。私はいくつかの変更が必要な行についてコメントを追加しました。

package main 

import (
    "fmt" 
    "encoding/xml" 
) 

func main() { 
    data:=` 
    <?xml version="1.0" encoding="UTF-8"?> 
    <applist> 
     <app app_id="1234" app_name="abc"/> 
     <app app_id="5678" app_name="def"/> 
    </applist> 
    ` 

    type App struct { 
     App_id string `xml:"app_id,attr"` // notice the capitalized field name here 
     App_name string `xml:"app_name,attr"` // notice the capitalized field name here and the `xml:"app_name,attr"` 
    } 

    type AppList struct { 
     XMLName xml.Name `xml:"applist"` 
     Apps []App  `xml:"app"` 
    } 

    var portfolio AppList 
    err := xml.Unmarshal([]byte(data), &portfolio) 
    if err != nil { 
     fmt.Printf("error: %v", err) 
     return 
    } 
    fmt.Printf("application ID:: %q\n", portfolio.Apps[0].App_id)  // the corresponding changes here for App 
    fmt.Printf("application name:: %q\n", portfolio.Apps[0].App_name) // the corresponding changes here for App 
} 
+0

パーフェクト。助けてくれてありがとう。 –

関連する問題