【问题标题】:XSD Cannot generate classes but works on similar fileXSD 无法生成类但适用于类似文件
【发布时间】:2018-08-16 08:53:31
【问题描述】:

我过去将很多 xsd 转换为 C#,但今天我面临一个新的错误消息,对我来说:“无法生成类,因为没有找到具有复杂类型的顶级元素。”

我在 2 个文件上遇到了这个问题。我阅读了很多关于此的帖子,它们帮助我解决了我遇到的 2 个问题中的至少 1 个。

我修复的文件是:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:mg="urn:crif-messagegateway:2006-08-23" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:crif-messagegateway:2006-08-23" elementFormDefault="qualified" attributeFormDefault="unqualified">
    <xs:element name="MGRequest" type="xs:string"/>
    <xs:element name="MGResponse" type="xs:string"/>
</xs:schema>

我将其编辑为:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:mg="urn:crif-messagegateway:2006-08-23" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:crif-messagegateway:2006-08-23" elementFormDefault="qualified" attributeFormDefault="unqualified">
    <xs:element name="MGRequest">
        <xs:complexType>
            <xs:simpleContent>
                <xs:extension base="xs:string" />
            </xs:simpleContent>
        </xs:complexType>
    </xs:element>
    <xs:element name="MGResponse">
        <xs:complexType>
            <xs:simpleContent>
                <xs:extension base="xs:string" />
            </xs:simpleContent>
        </xs:complexType>
    </xs:element>
</xs:schema>

现在,我也在尝试转换以下 xsd 文件(与之前修复的非常相似),但它 xsd.exe 抛出错误 "cannot generate classes because no top-level elements with complex type were找到了。”。哪个是问题?上面的工作文件有什么区别?

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:mg="urn:crif-messagegateway:2006-08-23" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:crif-messagegateway:2006-08-23" elementFormDefault="qualified" attributeFormDefault="unqualified">
    <xs:element name="MGRequest">
        <xs:complexType>
            <xs:sequence>
                <xs:any namespace="##other"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="MGResponse">
        <xs:complexType>
            <xs:sequence>
                <xs:any namespace="##other"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

我也尝试使用 xsd2code,但得到的只是一个空类。

【问题讨论】:

    标签: class xsd auto-generate xsd.exe xsd2code


    【解决方案1】:

    我猜它不需要创建一个类来包装原始类型,如果你通过Liquid XML Objects 运行它,你会得到这个

    namespace LiquidTechnologies.GeneratedLx.Mg
    {
        #region Elements
        /// <summary>A class representing the root XSD element MGRequest@urn:crif-messagegateway:2006-08-23</summary>
        /// <XsdPath>schema:schema.xsd/element:MGRequest</XsdPath>
        /// <XsdFile>file://sandbox/schema.xsd</XsdFile>
        /// <XsdLocation>3:5-3:52</XsdLocation>
        [LxSimpleElementDefinition("MGRequest", "urn:crif-messagegateway:2006-08-23", ElementScopeType.GlobalElement)]
        public partial class MGRequestElm
        {
            /// <summary>Holds the <see cref="System.String" /> (xs:http://www.w3.org/2001/XMLSchema:string) value of the element</summary>
            /// <XsdPath>schema:schema.xsd/element:MGRequest</XsdPath>
            /// <XsdFile>file://sandbox/schema.xsd</XsdFile>
            /// <XsdLocation>3:5-3:52</XsdLocation>
            [LxValue(LxValueType.Value, XsdType.XsdString)]
            public System.String Value { get; set; } = "";
    
        }
    
        /// <summary>A class representing the root XSD element MGResponse@urn:crif-messagegateway:2006-08-23</summary>
        /// <XsdPath>schema:schema.xsd/element:MGResponse</XsdPath>
        /// <XsdFile>file://sandbox/schema.xsd</XsdFile>
        /// <XsdLocation>4:5-4:53</XsdLocation>
        [LxSimpleElementDefinition("MGResponse", "urn:crif-messagegateway:2006-08-23", ElementScopeType.GlobalElement)]
        public partial class MGResponseElm
        {
            /// <summary>Holds the <see cref="System.String" /> (xs:http://www.w3.org/2001/XMLSchema:string) value of the element</summary>
            /// <XsdPath>schema:schema.xsd/element:MGResponse</XsdPath>
            /// <XsdFile>file://sandbox/schema.xsd</XsdFile>
            /// <XsdLocation>4:5-4:53</XsdLocation>
            [LxValue(LxValueType.Value, XsdType.XsdString)]
            public System.String Value { get; set; } = "";
    
        }
    
        #endregion
    
    }
    

    Liquid XML Objects 对于小型 xsd 是免费的。

    【讨论】:

      猜你喜欢
      • 2017-08-19
      • 2014-08-30
      • 1970-01-01
      • 2010-10-15
      • 1970-01-01
      • 2019-05-10
      • 2010-09-20
      • 2020-12-27
      • 2011-01-16
      相关资源
      最近更新 更多