为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕斯709654 2021-05-14 18:27:43
我正在尝试分析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标签的名称空间。但是我确实知道它可以为您检索有关名称空间的信息,然后可以对数据进行后期处理以获得相同的结果:


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


查看完整回答
反对 回复 2021-05-24
  • 3 回答
  • 0 关注
  • 298 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信