我有这样的简单 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
来自https://golang.org/pkg/encoding/xml/#Unmarshal:
如果结构具有 type
[]byte或stringtag 的字段",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