Golang:使用 xml.decode 从 xml 获取内部 xml

And*_*nko 1 xml go

我有这样的简单 XML:

<?xml version="1.0" encoding="ISO-8859-1"?>
  <nexgen_audio_export>
    <audio ID="id_1667331726_30393658">
      <type>Song</type>
      <status>Playing</status>
      <played_time>09:41:18</played_time>
      <composer>Frederic Delius</composer>
      <title>Violin Sonata No.1</title>
      <artist>Tasmin Little, violin; Piers Lane, piano</artist>
      <comments>
         <p>Comment line1</p>
         <p>Comment <b>line2</b></p>
         <p>Comment line3</p>
      </comments>
    </audio>
  </nexgen_audio_export>
Run Code Online (Sandbox Code Playgroud)

如何从内部获得XMLxml:"nexgen_audio_export>audio>comments"的所有标签(<p><b>使用xml.decode等)?

谢谢你,AP

1la*_*ann 6

来自https://golang.org/pkg/encoding/xml/#Unmarshal

如果结构具有 type[]bytestringtag 的字段",innerxml",则 Unmarshal 会累积嵌套在该字段中元素内的原始 XML。

您可以只将 struct 标记",innerxml"用于类型的字段,string或者[]byte您尝试从中提取 XML 的元素内的字段。您需要使用子结构。还要注意,XML 库的选择查询从第一个元素开始(这很奇怪)。所以你不能用 开始标签nexgen_audio_export>,而是直接转到audio>

这是工作示例代码:

package main

import (
    "encoding/xml"
    "fmt"
)

// Encoding had to be changed to UTF-8
var input = []byte(`<?xml version="1.0" encoding="UTF-8"?>
  <nexgen_audio_export>
    <audio ID="id_1667331726_30393658">
      <type>Song</type>
      <status>Playing</status>
      <played_time>09:41:18</played_time>
      <composer>Frederic Delius</composer>
      <title>Violin Sonata No.1</title>
      <artist>Tasmin Little, violin; Piers Lane, piano</artist>
      <comments>
         <p>Comment line1</p>
         <p>Comment <b>line2</b></p>
         <p>Comment line3</p>
      </comments>
    </audio>
  </nexgen_audio_export>`)

type audio struct {
    Comments struct {
        InnerXML string `xml:",innerxml"`
    } `xml:"audio>comments"`
}

func main() {
    var a audio
    err := xml.Unmarshal(input, &a)
    if err != nil {
        panic(err)
    }

    fmt.Println(a.Comments.InnerXML)
}
Run Code Online (Sandbox Code Playgroud)

游乐场链接:https : //play.golang.org/p/LAL2V0zExc