我的xsd文件具有以下结构:
<?xml version="1.0" encoding="UTF-8"?>
<!-- EIS docs-ws-api Integration Scheme, version 6.4, create date 15.11.2016 -->
<someTag></someTag>
如何获得此评论? 我尝试在游乐场https://play.golang.org/p/PVHux_Gvb7
上做到了答案 0 :(得分:1)
正如在其他答案中所提到的,xml.Unmarshal
只有在它是XML元素的一部分时才能解析注释。
实现xmlpath
规范的外部库XPath在您的情况下非常有用。
安装:
go get gopkg.in/xmlpath.v1
让我们从您的示例xml中提取preceding
标记someTag
的注释。
import (
"fmt"
"log"
"strings"
xmlpath "gopkg.in/xmlpath.v1"
)
func main() {
data := `
<?xml version="1.0" encoding="UTF-8"?>
<!-- EIS docs-ws-api Integration Scheme, version 6.4, create date 15.11.2016 -->
<someTag></someTag>
`
path := xmlpath.MustCompile("/someTag/preceding::comment()")
root, err := xmlpath.Parse(strings.NewReader(data))
if err != nil {
log.Fatal(err)
}
if comment, ok := path.String(root); ok {
fmt.Println(comment)
}
}
答案 1 :(得分:0)
简短回答:上面的评论不在root
元素中。它在根元素之外,因此xml.Unmarshal
无法读取它
<强>说明强>
每个XML文档只有一个根元素。它包含了所有 其他元素,因此是所有的唯一的父元素 其他元素。 ROOT元素也称为文档元素。
根据encoding/xml的文件
- 如果XML元素包含注释,它们将累积在第一个包含标记&#34;,comment&#34;的结构字段中。结构域可以 有类型[]字节或字符串。如果没有这样的字段,评论 被丢弃了。
由于评论在所有元素之外。您可能无法将其解码为结构
接下来是XML文档的扩展示例,演示了rootElement元素和标题。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE example [<!ENTITY copy "©">
<rootElement attribute="xyz">
<contentElement/>
</rootElement>
<!-- comment nodes may appear almost anywhere -->
以下是针对W3C的XML格式的当前(2017年1月)标准:link