我正在尝试使用 Go 编程语言解析 EPUB 元数据,我当前解析的 XML 非常简单:
<?xml version="1.0" encoding="UTF-8"?>
<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
<rootfiles>
<rootfile full-path="OEBPS/content.opf" media-type="application/oebps-package+xml"/>
</rootfiles>
</container>
我想要属性full-path
和media-type
Go 代码是:
package main
import (
"fmt"
"encoding/xml"
)
type RootFile struct {
FullPath string `xml:"full-path,attr"`
MediaType string `xml:"media-type,attr"`
}
func main() {
xmlData := `
<?xml version="1.0" encoding="UTF-8"?>
<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
<rootfiles>
<rootfile full-path="OEBPS/content.opf" media-type="application/oebps-package+xml"/>
</rootfiles>
</container>
`
var rootFile RootFile
xml.Unmarshal([]byte(xmlData), &rootFile)
fmt.Println(rootFile)
}
但我得到的是空的结果:
{ }
我的代码有什么问题?
我不相信 go 对这里使用的标签有开箱即用的支持
container
,所以我认为你只是因为没有完整地解析 XML 而感到痛苦。这些类型将是一个完整的解析:
但是您不需要声明您不感兴趣的字段,例如
version
和xmlns
。尽管如此,您仍然需要表达 xml 的整个树结构。以下是完整的工作示例: