在Go中解析XML时处理名称空间

我正在尝试分析Go中的XML:


package main


import (

    "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标签的内容(即没有名称空间的标签)?


慕斯709654
浏览 299回答 3
3回答

郎朗坤

我不认为xml解码器可以指定一个元素不应该带有struct标签的名称空间。但是我确实知道它可以为您检索有关名称空间的信息,然后可以对数据进行后期处理以获得相同的结果:package mainimport (&nbsp; &nbsp; "encoding/xml"&nbsp; &nbsp; "fmt")type Foo struct {&nbsp; &nbsp; XMLName xml.Name&nbsp; &nbsp; Data string `xml:",chardata"`}type XML struct {&nbsp; &nbsp; Foo []Foo `xml:"foo"`}func main() {&nbsp; &nbsp; rawXML := []byte(`<xml>&nbsp; <foo>A</foo>&nbsp; <ns:foo>B</ns:foo></xml>`)&nbsp; &nbsp; x := new(XML)&nbsp; &nbsp; xml.Unmarshal(rawXML, x)&nbsp; &nbsp; //fmt.Printf("foo: %#v\n", x)&nbsp; &nbsp; for _, el := range x.Foo {&nbsp; &nbsp; &nbsp; &nbsp;if el.XMLName.Space == "" {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fmt.Printf("non namespaced foo %q", el.Data)&nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }}http://play.golang.org/p/aDEFPmHPc0
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go