我正在尝试通过golang解析生成的xsd。为了保持此用例的非常简单,xsd 架构仅包含一个枚举(简单类型)。示例代码package mainimport ( "encoding/xml" "fmt")var schemaStr = `<?xml version="1.0" encoding="UTF-8"?><xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.web.com/MYSVC" xmlns:svc="http://schemas.web.com/MYSVCC" xmlns:codegen="http://schemas.web.com/MYSVC" targetNamespace="http://schemas.web.com/MYSVC" elementFormDefault="qualified"> <xsd:simpleType name="My_Enum_e"> <xsd:restriction base="xsd:integer"> <xsd:enumeration value="0" codegen:cname="ENUM_0" /> <xsd:enumeration value="1" codegen:cname="ENUM_1" /> <xsd:enumeration value="2" codegen:cname="ENUM_2" /> <xsd:enumeration value="3" codegen:cname="ENUM_3" /> </xsd:restriction> </xsd:simpleType></xsd:schema>`type Schema struct { XMLName xml.Name `xml:"schema"` TargetNamespace string `xml:"targetNamespace,attr"` Namespaces map[string]string `xml:"-"` SimpleTypes []*SimpleType `xml:"simpleType"`}type SimpleType struct { XMLName xml.Name `xml:"simpleType"` Name string `xml:"name,attr"` Restriction *Restriction `xml:"restriction"`}type Restriction struct { XMLName xml.Name `xml:"restriction"` Base string `xml:"base,attr"` Enum []*Enum `xml:"enumeration"`}type Enum struct { XMLName xml.Name `xml:"enumeration"` Value string `xml:"value,attr"` EnumString string `xml:"codegen cname,attr"`}func main() { schema := &Schema{} xml.Unmarshal([]byte(schemaStr), schema) for _, simpleType := range schema.SimpleTypes { if simpleType.Restriction == nil { continue } for _, enumVal := range simpleType.Restriction.Enum { fmt.Printf("[%v] = [%v]\n", enumVal.Value, enumVal.EnumString) } }}上述程序的输出是 Go Play 链接复制问题[0] = [][1] = [][2] = [][3] = []它无法解析作为 xsd 的一部分提供的 codegen:cname 标记。如果我手动删除以下 xml 命名空间
1 回答

守着星空守着你
TA贡献1799条经验 获得超8个赞
命名空间是 ,是命名空间的别名,一旦解析了 XML,该别名就会丢失:http://schemas.web.com/MYSVC
codegen
EnumString string `xml:"http://schemas.web.com/MYSVC cname,attr"`
- 1 回答
- 0 关注
- 147 浏览
添加回答
举报
0/150
提交
取消