2016-06-11 25 views
0

次のxmlを構造体に変換する必要があります。 main.Message {XMLNameの:xml.Name {スペース: "http://www.ncpdp.org/schema/SCRIPT" ローカル "メッセージ"}、リリース: ""エンコード/ xmlパッケージを使用してxml属性値を取得する方法

https://play.golang.org/p/tboi-mp06k

var data = `<Message xmlns="http://www.ncpdp.org/schema/SCRIPT" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    release="006" 
    version="010">` 

type Message struct { 
    XMLName xml.Name `xml:http://www.ncpdp.org/schema/SCRIPT "Message"` 
    release string `xml:"release,attr"` 
    version string `xml:"version,attr"` 
} 

func main() { 

    msg := Message{} 
    _ = xml.Unmarshal([]byte(data), &msg) 

    fmt.Printf("%#v\n", msg) 

}

プログラムは、以下を出力します、バージョン: ""} リリースとバージョンは空です。何か提案してください?あなたの構造体を変更する

+1

任意の解析(xmlまたはjson)は、エクスポートされたフィールドでのみ機能します。 「リリース」と「バージョン」はアンエクスポートされているので、それらは空のままです。 – jnmoal

+0

はい、ありがとうございます! – user1848653

答えて

0

type Message struct { 
    XMLName xml.Name `xml:http://www.ncpdp.org/schema/SCRIPT "Message"` 
    Release string `xml:"release,attr"` 
    Version string `xml:"version,attr"` 
} 

は、問題を解決します。 Goのケースを使用して、特定の識別子がパッケージのコンテキスト内でpublicかprivateかを判断します。コードでは、フィールドはxml.Unmarshalには表示されません。これはコードを含むパッケージの一部ではないためです。

フィールドを大文字に変更すると、フィールドがパブリックになりエクスポートできるようになりました。

実例:https://play.golang.org/p/h8Q4t_3ctS

関連する問題