我正在嘗試分析Go中的XML:package mainimport ( "encoding/xml" "fmt")type XML struct { Foo string `xml:"foo"`}func main() { rawXML := []byte(`<xml> <foo>A</foo> <ns:foo>B</ns:foo></xml>`) x := new(XML) xml.Unmarshal(rawXML, x) fmt.Printf("foo: %s\n", x.Foo)}輸出:foo: B雖然我希望它會產生:foo: A如何獲得第一個foo標簽的內容(即沒有名稱空間的標簽)?
3 回答

郎朗坤
TA貢獻1921條經驗 獲得超9個贊
我不認為xml解碼器可以指定一個元素不應該帶有struct標簽的名稱空間。但是我確實知道它可以為您檢索有關名稱空間的信息,然后可以對數(shù)據(jù)進行后期處理以獲得相同的結果:
package main
import (
"encoding/xml"
"fmt"
)
type Foo struct {
XMLName xml.Name
Data string `xml:",chardata"`
}
type XML struct {
Foo []Foo `xml:"foo"`
}
func main() {
rawXML := []byte(`
<xml>
<foo>A</foo>
<ns:foo>B</ns:foo>
</xml>`)
x := new(XML)
xml.Unmarshal(rawXML, x)
//fmt.Printf("foo: %#v\n", x)
for _, el := range x.Foo {
if el.XMLName.Space == "" {
fmt.Printf("non namespaced foo %q", el.Data)
}
}
}
http://play.golang.org/p/aDEFPmHPc0
- 3 回答
- 0 關注
- 334 瀏覽
添加回答
舉報
0/150
提交
取消