質問
のXMLの例壊れているのドキュメントを行きます。誰もがそれを動作させる方法を知っていますか?私はそれをコンパイルすると、結果は次のとおりです。
xmlexample.go:34: cannot use "name" (type string) as type xml.Name in field value
xmlexample.go:34: cannot use nil as type string in field value
xmlexample.go:34: too few values in struct initializer
ここでは、関連するコードがあります
package main
import (
"bytes"
"xml"
)
type Email struct {
Where string "attr";
Addr string;
}
type Result struct {
XMLName xml.Name "result";
Name string;
Phone string;
Email []Email;
}
var buf = bytes.NewBufferString ( `
<result>
<email where="home">
<addr>gre@example.com</addr>
</email>
<email where='work'>
<addr>gre@work.com</addr>
</email>
<name>Grace R. Emlin</name>
<address>123 Main Street</address>
</result>`)
func main() {
var result = Result{ "name", "phone", nil }
xml.Unmarshal ( buf , &result )
println ( result.Name )
}
解決
type Result
は以下のように定義されます
type Result struct {
XMLName xml.Name "result"
Name string
Phone string
Email []Email
}
type xml.Name
に埋め込まtype Result
は、のように定義されます
// A Name represents an XML name (Local) annotated
// with a name space identifier (Space).
// In tokens returned by Parser.Token, the Space identifier
// is given as a canonical URL, not the short prefix used
// in the document being parsed.
type Name struct {
Space, Local string
}
このため、のものと同様のものを使用して、複合リテラルを使用して、初期化
var result = Result{xml.Name{}, "name", "phone", nil}
var result = Result{xml.Name{"space", "local"}, "name", "phone", nil}
var result = Result{Name: "name", Phone: "phone", Email: nil}
他のヒント
の行
var result = Result{ "name", "phone", nil }
タグになる必要があります
var result = Result{ Name: "name", Phone: "phone", Email: nil }
予想通りそして、それが動作するはずです。その誰もが、再びこの特定の問題が発生したべきではない、私はドキュメントを修正するためのパッチを提出し、偶然のリリースでは、すぐ後に発生します。
あなたがそうのように、他の引数と一緒にxml.Nameを{}供給する場合は、
また、働くます:
var result = Result{ xml.Name{"", "result"}, "name", "phone", nil }
ここ
var result Result
作品ます。
所属していません StackOverflow