سؤال
مثال 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