문제

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