|
Ограничение составного типа в пакете XDTO | ☑ | ||
---|---|---|---|---|
0
Fragster
гуру
20.07.20
✎
11:20
|
Можно ли как-нибудь ограничить список типов для полей составного типа? Сейчас использую anytype/anysimpletype, но хотелось бы ограничить списком нескольких типов из пакета.
|
|||
1
Йохохо
20.07.20
✎
11:22
|
ЭДО, формирование XML по формату 820@, вопросы
там вспоминали про xs:choice, не оно? |
|||
2
Fragster
гуру
20.07.20
✎
11:42
|
Это не совсем то, это про наличие свойств у объекта, а не про их тип. Ну и как это сделать не внешним редактором - не совсем очевидно.
При этом даже в "экспорт схемы конфигурации" не нашел ограничений для полей составного типа. Тупо anyType. |
|||
3
Serginio1
20.07.20
✎
13:07
|
Вообщето в C# такой код транслируется как свойство
<xs:element name="Documents"> <xs:annotation> <xs:documentation>Документы от организации</xs:documentation> </xs:annotation> <xs:complexType> <xs:sequence> <xs:element name="Owner" type="ns:SenderInfo"> <xs:annotation> <xs:documentation>Организация, которая предоставляет документы</xs:documentation> </xs:annotation> </xs:element> <xs:element name="Document" minOccurs="1" maxOccurs="1" nillable="0" type="ns:DocBody"> <xs:annotation> <xs:documentation>Документ</xs:documentation> </xs:annotation> </xs:element> </xs:sequence> <xs:attribute name="Version" type="c:NoEmptyString" default="1.0"/> </xs:complexType> </xs:element> <xs:complexType name="DocBody"> <xs:choice minOccurs="1" maxOccurs="1" id="name"> <xs:element name="WayBill" type="wb:WayBillType" minOccurs="1" maxOccurs="1"/> <xs:element name="Ticket" type="tc:TicketType" minOccurs="1" maxOccurs="1"/> <xs:element name="WayBillAct" type="wa:WayBillActType" minOccurs="1" maxOccurs="1"/> <xs:element name="ConfirmTicket" type="ctc:ConfirmTicketType" minOccurs="1" maxOccurs="1"/> public partial class DocBody { private object itemField; private ItemChoiceType itemElementNameField; /// <remarks/> [System.Xml.Serialization.XmlElementAttribute("ActChargeOn", typeof(ActChargeOnType))] [System.Xml.Serialization.XmlElementAttribute("ActChargeOnShop_v2", typeof(ActChargeOnShopType_v2))] [System.Xml.Serialization.XmlElementAttribute("ActChargeOn_v2", typeof(ActChargeOnType_v2))] ........ [System.Xml.Serialization.XmlElementAttribute("WayBillAct_v3", typeof(WayBillActType_v3))] [System.Xml.Serialization.XmlElementAttribute("WayBill_v2", typeof(WayBillType_v2))] [System.Xml.Serialization.XmlElementAttribute("WayBill_v3", typeof(WayBillType_v3))] [System.Xml.Serialization.XmlChoiceIdentifierAttribute("ItemElementName")] public object Item { get { return this.itemField; } set { this.itemField = value; } } |
|||
4
Fragster
гуру
20.07.20
✎
13:18
|
короче, для примера:
вот схема https://gist.github.com/FragsterAt/d8c107e937dbfa9e40985d748dfbd8ec нужно, чтобы Список.Значение мог быть только типа СсылкаЗначение1 или СсылкаЗначение2 и не могло быть СсылкаЗначение3 |
|||
5
Serginio1
20.07.20
✎
13:54
|
Ну в C# для этого есть KnownType и XmlArrayItem
https://docs.microsoft.com/ru-ru/dotnet/standard/serialization/controlling-xml-serialization-using-attributes А вот для XSD не знаю https://docs.microsoft.com/en-us/dotnet/api/system.xml.serialization.xmlarrayitemattribute.type?view=netcore-3.1 |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |