XSD не может генерировать классы, но работает с аналогичным файлом

Раньше я преобразовывал много xsd в C#, но сегодня я столкнулся с новым сообщением об ошибке: "невозможно создать классы, поскольку элементы верхнего уровня со сложным типом не найдены".

У меня эта проблема на 2 файлах. Я прочитал много постов об этом, и они помогли мне решить как минимум 1 из 2 проблем, которые у меня есть.

Файл, который я исправил, был:

<?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 выдает ошибку «невозможно создать классы, поскольку элементы верхнего уровня со сложным типом не найдены». . В чем проблема? Каковы различия между рабочим файлом выше?

<?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, но я получаю просто пустой класс.


person Piero Alberto    schedule 16.08.2018    source источник


Ответы (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.

person Sprotty    schedule 07.05.2019