xml.Unmarshal()
함수의 doc은 XML 문서와 구조체 간의 매핑이 작동하는 방식을 설명합니다 (doc : json.Marshal()
보충). 구조 태그에 익숙하지 않은 경우이 대답을 확인하십시오. What are the use(s) for tags in Go?
먼저 XML 문서를 모델링해야합니다. 모든 다른 XML 문서 주위에 래퍼 XML 요소가 없으면 XML 문서가 아니라 여러 개의 XML 문서가 필요합니다. <table>
개의 문서가 여러 개 있습니다.
당신이처럼 모델링 할 수 있습니다
type Col struct {
Name string `xml:"name,attr"`
Value string `xml:",chardata"`
}
type Row struct {
Cols []Col `xml:"col"`
}
type Table struct {
Name string `xml:"name,attr"`
Rows []Row `xml:"row"`
}
을 그리고 여러 <table>
요소를 갖고 있기 때문에, 가장 쉬운 방법은 xml.Decoder()
을 만들고 Decoder.Decode()
전화와 별도로 각을 구문 분석하는 것입니다 (Decoder.Decode()
은 1 XML 문서를 구문 분석을 시도합니다 그것의 근원 독자).
이것은 그것을 할 수있는 방법입니다 :
d := xml.NewDecoder(strings.NewReader(data))
for {
var table Table
if err := d.Decode(&table); err != nil {
fmt.Println(err)
break
}
fmt.Printf("%+v\n", table)
}
소스 string
에서 더 이상 데이터가없는 경우, Decoder.Decode()
는 io.EOF
를보고합니다.다음 data
문자열 위 대구 실행 :
const data = `<table name="table1">
<row>
<col name="col1">value1</col>
<col name="col2">value2</col>
<col name="col3">value3</col>
</row>
<row>
<col name="col1">value4</col>
<col name="col2">value5</col>
<col name="col3">value6</col>
</row>
</table>
<table name="table2">
<row>
<col name="col1">value7</col>
<col name="col2">value8</col>
<col name="col3">value9</col>
<col name="col4">valueA</col>
</row>
</table>`
출력은 다음과 같습니다
{Name:table1 Rows:[{Cols:[{Name:col1 Value:value1} {Name:col2 Value:value2} {Name:col3 Value:value3}]} {Cols:[{Name:col1 Value:value4} {Name:col2 Value:value5} {Name:col3 Value:value6}]}]}
{Name:table2 Rows:[{Cols:[{Name:col1 Value:value7} {Name:col2 Value:value8} {Name:col3 Value:value9} {Name:col4 Value:valueA}]}]}
EOF
가 Go Playground에보십시오.
감사 :하며 (최소한의 작업 예를 들어 놀이터 링크를 참조
getName
가name
속성을 반환하는 함수 임) 다음과 같은 뭔가. 나는 첫번째 질문에서 충분히 명확하지 않았으므로 좀 더 자세한 내용으로 편집했습니다. –@LeonardoRossi 편집을 참조하십시오. –