解组XML保留子元素

时间:2014-05-27 09:57:15

标签: xml go unmarshalling

代码http://play.golang.org/p/PlOMw4wfT2

我想在解组时保留一些XML标记中的子元素。这是我的代码:

package main

import (
    "encoding/xml"
    "log"
)

func main() {
    xmltext := []byte(`<Root><Foo>text text text <a href="url">foo bar</a> and more text.</Foo></Root>`)
    type mystruct struct {
        Foo string `xml:",innerxml"`
    }
    v := &mystruct{}

    err := xml.Unmarshal(xmltext, v)
    if err != nil {
        log.Fatal(err)
    }
    log.Println(v.Foo)
}

结果是:

    <Foo>text text text <a href="url">foo bar</a> and more text.</Foo>

但我想得到

    text text text <a href="url">foo bar</a> and more text.

(没有周围的Foo标签)

那就是:我想保留元素Foo的“字符串值”(不是XPath意义上的字符串值)。

如何在没有<Foo></Foo>的情况下从元素Foo获取内容?

1 个答案:

答案 0 :(得分:0)

,innerxml包含XML标记的内容(它的名称是什么)。因此,我必须更深入一级:

package main

import (
    "encoding/xml"
    "log"
)

func main() {
    xmltext := []byte(`<Root><Foo>text text text <a href="url">foo bar</a> and more text.</Foo></Root>`)

    type text struct {
        Text string `xml:",innerxml"`
    }
    type mystruct struct {
        Foo text
    }
    v := &mystruct{}

    err := xml.Unmarshal(xmltext, v)
    if err != nil {
        log.Fatal(err)
    }
    log.Println(v.Foo.Text)
    // text text text <a href="url">foo bar</a> and more text.
}