سؤال

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

يعمل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top