为了账号安全,请及时绑定邮箱和手机立即绑定

如果 Go 中有相应的 xml 命名空间,为什么 Xsd 解析对特定属性失败?

如果 Go 中有相应的 xml 命名空间,为什么 Xsd 解析对特定属性失败?

Go
侃侃无极 2022-08-24 17:35:16
我正在尝试通过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/MYSVCcodegen

EnumString string   `xml:"http://schemas.web.com/MYSVC cname,attr"`


查看完整回答
反对 回复 2022-08-24
  • 1 回答
  • 0 关注
  • 147 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号