Unmarshal XML-документ с xmlns пространствами имен

58
7

Я хочу развязать 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>

Я использую этот тип для unmarchal в:

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>

Как справиться с этим случаем unmarshaling?

спросил(а) 2015-11-11T20:45:00+03:00 4 года, 10 месяцев назад
1
Решение
90

Пространства имен обозначаются их 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.

ответил(а) 2015-11-11T20:59:00+03:00 4 года, 10 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема