使用xmlns命名空间解组xml文档

时间:2015-11-11 17:45:02

标签: xml go

我想要解组一个看似喜欢的RDF文档:

<?xml version="1.0" encoding="WINDOWS-1252"?>
<rdf:RDF  xmlns:owl       = "http://www.w3.org/2002/07/owl#"
   xmlns:rdf = "http://www.w3.org/1999/02/22-rdf-syntax-ns#"

   <!-- other xml element -->
</rdf:RDF>

我使用此类型进行取消购买:

type wsdlDoc struct {
    XMLName xml.Name `xml:"rdf:RDF"`
    Name    string   `xml:"grounding:hasAtomicProcessGrounding"`
}

执行此操作的代码片段:

// you should import "github.com/rogpeppe/go-charset/charset"
// and _ "github.com/rogpeppe/go-charset/data"
dec := xml.NewDecoder(file)
dec.CharsetReader = charset.NewReader
var v wsdlDoc
err = dec.Decode(&v)
if err != nil {
    panic(err)
}

当我运行代码时,恐慌打印出此错误:

panic: expected element type <rdf:RDF> but have <RDF>

如何处理这种解组的情况?

1 个答案:

答案 0 :(得分:0)

命名空间用它们的URL表示,并用空格分隔名称,所以你的结构应该更像

type wsdlDoc struct {
    XMLName xml.Name `xml:"http://www.w3.org/1999/02/22-rdf-syntax-ns# RDF"`
    // ...
}

游乐场示例:http://play.golang.org/p/tYVm2h6cIm