我有一个 XML 结构,其中有一个未命名空间的“类型”属性和一个命名空间属性。我无法让 GO 的解组器读取两个“类型”属性。
XML 是:
data := `<response xmlns="urn:debugger_protocol_v1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<map name="bool" type="bool_T" xsi:type="xsd:boolean"></map>
<map name="int" type="int_T" xsi:type="xsd:decimal"></map>
</response>`
我的 Go/XML 定义是:
type Typemap struct {
XMLName xml.Name `xml:"map"`
Name string `xml:"name,attr"`
Type string `xml:"urn:debugger_protocol_v1 type,attr"`
XsiType string `xml:"http://www.w3.org/2001/XMLSchema-instance type,attr"`
}
type Response struct {
XMLName xml.Name `xml:"response"`
Typemap []Typemap `xml:"map,omitempty"`
}
运行以下代码时:
package main
import (
"encoding/xml"
"fmt"
"strings"
)
type Typemap struct {
XMLName xml.Name `xml:"map"`
Name string `xml:"name,attr"`
Type string `xml:"urn:debugger_protocol_v1 type,attr"`
XsiType string `xml:"http://www.w3.org/2001/XMLSchema-instance type,attr"`
}
type Response struct {
XMLName xml.Name `xml:"response"`
Typemap []Typemap `xml:"map,omitempty"`
}
func main() {
rq := new(Response)
data := `<response xmlns="urn:debugger_protocol_v1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<map name="bool" type="bool_T" xsi:type="xsd:boolean"></map>
<map name="int" type="int_T" xsi:type="xsd:decimal"></map>
</response>`
reader := strings.NewReader(data)
decoder := xml.NewDecoder(reader)
err := decoder.Decode(&rq)
if err != nil {
fmt.Println(err)
}
fmt.Printf("Unmarshalled Content:\n%v", rq)
}
输出漏掉了bool_T,如下:
&{{urn:debugger_protocol_v1 response} [
{{urn:debugger_protocol_v1 map} bool xsd:boolean}
{{urn:debugger_protocol_v1 map} int xsd:decimal}
]}
如果我urn:debugger_protocol_v1从定义中删除 ,我会收到以下错误:
main.Typemap field "Type" with tag "type,attr" conflicts with field "XsiType" with tag "http://www.w3.org/2001/XMLSchema-instance type,attr"
我无法更改原始 XML 数据格式。有没有办法解组这两个type属性?
米脂
相关分类