【问题标题】:Unmarshal XML preserving child elements解组 XML 保留子元素
【发布时间】:2014-05-27 09:57:14
【问题描述】:

代码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 意义上的字符串值)。

如何在没有&lt;Foo&gt;&lt;/Foo&gt; 的情况下从元素Foo 中获取内容?

【问题讨论】:

    标签: xml go unmarshalling


    【解决方案1】:

    ,innerxml 包含 XML 标记的内容(这就是它的名称)。因此,我必须更深一层:

    主包

    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.
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-07
      • 1970-01-01
      • 1970-01-01
      • 2019-08-13
      • 1970-01-01
      • 2021-12-26
      • 2014-02-15
      • 1970-01-01
      相关资源
      最近更新 更多