|   |   | 
| 
 | Ошибка модели XDTO: Дублирование имени свойства | ☑ | ||
|---|---|---|---|---|
| 0
    
        tan76 10.04.17✎ 11:29 | 
        Проблема следующая, в хмл файле который получен с вебсервиса есть пары элементов с одинаковым именем. Сооветсвено при попытке загрузить сжему пакета получаем следующие:
 Ошибка проверки модели XDTO: xdto-objectType-3.1.2 тип: Transaction пакет: http://www.sample-package.org Дублирование имени свойства 'APMReferenceID' Подскажите есть способ обойти эти грабли? Схема такая: <xs:schema xmlns:tns="http://www.sample-package.org" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.sample-package.org" attributeFormDefault="unqualified" elementFormDefault="qualified"> <xs:complexType name="Response"> <xs:sequence> <xs:element name="RequestID" type="xs:ID"/> <xs:element name="FromDate" type="xs:dateTime"/> <xs:element name="ToDate" type="xs:dateTime"/> <xs:element name="PageTransactionsCount" type="xs:byte"/> <xs:element name="Transaction" type="tns:Transaction" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute name="Type" type="xs:string"/> <xs:attribute name="Version" type="xs:string"/> </xs:complexType> <xs:complexType name="Transaction"> <xs:sequence> <xs:element name="TransactionID" type="xs:int"/> <xs:element name="ClientName" type="xs:string"/> <xs:element name="RelatedTransactionID" type="xs:int"/> <xs:element name="ClientUniqueID" type="xs:string"/> <xs:element name="Result" type="xs:string"/> <xs:element name="Reason" type="xs:string"/> <xs:element name="AuthCode" type="xs:string"/> <xs:element name="Amount" type="xs:float"/> <xs:element name="Currency" type="xs:string"/> <xs:element name="UserID" type="xs:string"/> <xs:element name="TransactionDate" type="xs:dateTime"/> <xs:element name="TransactionType" type="xs:string"/> <xs:element name="IsRebill" type="xs:boolean"/> <xs:element name="MembershipID" type="xs:string"/> <xs:element name="Bank" type="xs:string"/> <xs:element name="CardCompany" type="xs:string"/> <xs:element name="Last4Digits" type="xs:short"/> <xs:element name="Email" type="xs:string"/> <xs:element name="FirstName" type="xs:string"/> <xs:element name="LastName" type="xs:string"/> <xs:element name="WebSite" type="xs:string"/> <xs:element name="ShopID" type="xs:byte"/> <xs:element name="CreditTypeId" type="xs:byte"/> <xs:element name="APMTransactionID" type="xs:string"/> <xs:element name="APMReferenceID" type="xs:string"/> <xs:element name="Bin" type="xs:int"/> <xs:element name="ExpDate" type="xs:short"/> <xs:element name="Address" type="xs:string"/> <xs:element name="City" type="xs:string"/> <xs:element name="State" type="xs:string"/> <xs:element name="ZipCode" type="xs:string"/> <xs:element name="Country" type="xs:string"/> <xs:element name="IPAddress" type="xs:string"/> <xs:element name="Phone" type="xs:string"/> <xs:element name="ReferenceID" type="xs:string"/> <xs:element name="IsVoiceAuth" type="xs:boolean"/> <xs:element name="RequestID" type="xs:string"/> <xs:element name="UniqueCC" type="xs:string"/> <xs:element name="ECI" type="xs:byte"/> <xs:element name="ExternalAccountID" type="xs:string"/> <xs:element name="APMReferenceID" type="xs:string"/> <xs:element name="ProductID" type="xs:string"/> </xs:sequence> <xs:attribute name="TransactionID" type="xs:int"/> </xs:complexType> </xs:schema> Фрагмент файла XML: <?xml version="1.0" encoding="UTF-8"?> <Response xmlns="http://www.sample-package.org" Type="Transactions" Version="1.1.6"> <RequestID>3528276d-3df0-4c90-a56f-987f7c7bddcd</RequestID> <FromDate>2017-03-17 00:00:00</FromDate> <ToDate>2017-03-17 23:59:59</ToDate> <PageTransactionsCount>89</PageTransactionsCount> <Transaction TransactionID="482390311"> <TransactionID>482390311</TransactionID> <ClientName>Awadticket Ltd 3D</ClientName> <RelatedTransactionID>0</RelatedTransactionID> <ClientUniqueID>a32a7453-30f2-4e5b-9d6b-7be5fef140db</ClientUniqueID> <Result>Approved</Result> <Reason /> <AuthCode /> <Amount>5.59</Amount> <Currency>EUR</Currency> <UserID /> <TransactionDate>2017-03-17 10:52:54</TransactionDate> <TransactionType>Auth3D</TransactionType> <IsRebill>false</IsRebill> <MembershipID /> <Bank>Safecharge Acquirer - MasterCard</Bank> <CardCompany>MasterCard</CardCompany> <Last4Digits>1013</Last4Digits> <Email /> <FirstName /> <LastName /> <WebSite /> <ShopID>0</ShopID> <CreditTypeId>0</CreditTypeId> <APMTransactionID /> <APMReferenceID /> <Bin>548673</Bin> <ExpDate>1117</ExpDate> <Address /> <City /> <State /> <ZipCode /> <Country>RU</Country> <IPAddress /> <Phone /> <ReferenceID /> <IsVoiceAuth>false</IsVoiceAuth> <RequestID /> <UniqueCC>Qdu4lEUWJTtBz37oeBS9SGcNcrY=</UniqueCC> <ECI>7</ECI> <ExternalAccountID /> <APMReferenceID /> <ProductID /> </Transaction> <Transaction TransactionID="482390373"> <TransactionID>482390373</TransactionID> <ClientName>Awadticket Ltd 3D</ClientName> <RelatedTransactionID>0</RelatedTransactionID> <ClientUniqueID>a32a7453-30f2-4e5b-9d6b-7be5fef140db</ClientUniqueID> <Result>Approved</Result> <Reason /> <AuthCode /> <Amount>15.5895</Amount> <Currency>EUR</Currency> <UserID /> <TransactionDate>2017-03-17 10:52:59</TransactionDate> <TransactionType>Auth3D</TransactionType> <IsRebill>false</IsRebill> <MembershipID /> <Bank>Safecharge Acquirer - MasterCard</Bank> <CardCompany>MasterCard</CardCompany> <Last4Digits>1013</Last4Digits> <Email /> <FirstName /> <LastName /> <WebSite /> <ShopID>0</ShopID> <CreditTypeId>0</CreditTypeId> <APMTransactionID /> <APMReferenceID /> <Bin>548673</Bin> <ExpDate>1117</ExpDate> <Address /> <City /> <State /> <ZipCode /> <Country>RU</Country> <IPAddress /> <Phone /> <ReferenceID /> <IsVoiceAuth>false</IsVoiceAuth> <RequestID /> <UniqueCC>Qdu4lEUWJTtBz37oeBS9SGcNcrY=</UniqueCC> <ECI>7</ECI> <ExternalAccountID /> <APMReferenceID /> <ProductID /> </Transaction> </Response> | |||
| 1
    
        tan76 10.04.17✎ 13:36 | 
        ап     | |||
| 2
    
        Рэйв 10.04.17✎ 13:39 | 
        убрать один из них, что тут думать     | |||
| 3
    
        Рэйв 10.04.17✎ 13:39 | 
        Или дать другое имя     | |||
| 4
    
        tan76 10.04.17✎ 13:46 | 
        я не могу убрать, не я генерю файл     | |||
| 5
    
        tan76 10.04.17✎ 13:47 | 
        я лишь схему сделал     | |||
| 6
    
        tan76 10.04.17✎ 13:48 | 
        Мне нужно так составить схему чтоб игнорировать этот повтор или совсем не читать эти колонки. Если это возможно конечно..     | |||
| 7
    
        Fragster гуру 10.04.17✎ 13:51 | 
        у Transaction последовательный = истина
 а у APMReferenceID минимальное количество = 0, максимальное -1 ну и гемор с заполнением - добавлять в нужные места этот APMReferenceID уже не помню как, но не через обычный список. Тот, кто формат сочинял - походу с головой не дружит. Ну, или мазохист. | |||
| 8
    
        Fragster гуру 10.04.17✎ 13:52 | 
        еще можно _попробовать_ обозвать второй свойство APMReferenceID2 и указать у него локальное имя     | |||
| 9
    
        Fragster гуру 10.04.17✎ 13:53 | 
        но хз, будет ли работать     | |||
| 10
    
        tan76 10.04.17✎ 13:55 | 
        (8) не взлетело, пробовал 
 (7) сейчас проверю | |||
| 11
    
        Fragster гуру 10.04.17✎ 13:57 | 
        если только читать такие файлы, то попроще     | |||
| 12
    
        Fragster гуру 10.04.17✎ 13:58 | 
        ну и можно минимальное = 2 максимальное = 2 поставить, если их действительно два     | |||
| 13
    
        tan76 10.04.17✎ 14:24 | 
        Ребята заработало, фрагстеру особое спасибо. Окончательный варинат схемы такой:
 <xs:schema xmlns:tns="http://www.sample-package.org" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.sample-package.org" attributeFormDefault="unqualified" elementFormDefault="qualified"> <xs:complexType name="Response"> <xs:sequence> <xs:element name="RequestID" type="xs:ID"/> <xs:element name="FromDate" type="xs:dateTime"/> <xs:element name="ToDate" type="xs:dateTime"/> <xs:element name="PageTransactionsCount" type="xs:byte"/> <xs:element name="Transaction" type="tns:Transaction" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute name="Type" type="xs:string"/> <xs:attribute name="Version" type="xs:string"/> </xs:complexType> <xs:complexType name="Transaction"> <xs:choice> <xs:element name="TransactionID" type="xs:int"/> <xs:element name="ClientName" type="xs:string"/> <xs:element name="RelatedTransactionID" type="xs:int"/> <xs:element name="ClientUniqueID" type="xs:string"/> <xs:element name="Result" type="xs:string"/> <xs:element name="Reason" type="xs:string"/> <xs:element name="AuthCode" type="xs:string"/> <xs:element name="Amount" type="xs:decimal"/> <xs:element name="Currency" type="xs:string"/> <xs:element name="UserID" type="xs:string"/> <xs:element name="TransactionDate" type="xs:dateTime"/> <xs:element name="TransactionType" type="xs:string"/> <xs:element name="IsRebill" type="xs:boolean"/> <xs:element name="MembershipID" type="xs:string"/> <xs:element name="Bank" type="xs:string"/> <xs:element name="CardCompany" type="xs:string"/> <xs:element name="Last4Digits" type="xs:short"/> <xs:element name="Email" type="xs:string"/> <xs:element name="FirstName" type="xs:string"/> <xs:element name="LastName" type="xs:string"/> <xs:element name="WebSite" type="xs:string"/> <xs:element name="ShopID" type="xs:byte"/> <xs:element name="CreditTypeId" type="xs:byte"/> <xs:element name="APMTransactionID" type="xs:string"/> <xs:element name="APMReferenceID" type="xs:string" maxOccurs="2"/> <xs:element name="Bin" type="xs:int"/> <xs:element name="ExpDate" type="xs:short"/> <xs:element name="Address" type="xs:string"/> <xs:element name="City" type="xs:string"/> <xs:element name="State" type="xs:string"/> <xs:element name="ZipCode" type="xs:string"/> <xs:element name="Country" type="xs:string"/> <xs:element name="IPAddress" type="xs:string"/> <xs:element name="Phone" type="xs:string"/> <xs:element name="ReferenceID" type="xs:string"/> <xs:element name="IsVoiceAuth" type="xs:boolean"/> <xs:element name="RequestID" type="xs:string"/> <xs:element name="UniqueCC" type="xs:string"/> <xs:element name="ECI" type="xs:byte"/> <xs:element name="ExternalAccountID" type="xs:string"/> <xs:element name="ProductID" type="xs:string"/> </xs:choice> <xs:attribute name="TransactionID" type="xs:int"/> </xs:complexType> </xs:schema> | |||
| 14
    
        tan76 10.04.17✎ 14:33 | 
        а ещё вопрос, у исходного ответа сервера отсутствует атрибут xmlns="http://www.sample-package.org";  и я добавляю его через СтрЗаменить(ТекстОтвета,"<Response ","<Response xmlns=""http://www.sample-package.org""; ");)
 может есть какое либо другое, более красивое решение этой задачи? | |||
| 15
    
        Fragster гуру 10.04.17✎ 14:43 | 
        (14) ну, можно через документDOM добавлять... но надо ли?     | |||
| 16
    
        Fragster гуру 10.04.17✎ 14:44 | 
        в смысле - работает, не чини     | |||
| 17
    
        Cyberhawk 10.04.17✎ 15:05 | 
        (14) Есть - писать вручную корневой тэг ответа (ЗаписатьНачалоЭлемента), затем УстановитьСоответствиеПространстваИмен, затем пишешь через фабрику ХМЛ-содержимое, затем ЗаписатьКонецЭлемента     | |||
| 18
    
        tan76 10.04.17✎ 15:06 | 
        я же не пишу, я только читаю ответ вебсервиса     | |||
| 19
    
        tan76 10.04.17✎ 15:08 | 
        или имеется ввиду получение этого ответа и запись его у себя локально но уже с xmlns? а потом уже парсить по схеме?     | |||
| 20
    
        Cyberhawk 10.04.17✎ 15:09 | 
        А, тогда пофиг как     | |||
| 21
    
        Fragster гуру 10.04.17✎ 15:13 | 
        что-то типа того (работоспособность не проверял):
 Чтение = Новый ЧтениеXML; Чтение.УстановитьСтроку(СтрокаXML); Чтение.ПерейтиКСодержимому(); Построитель = Новый ПостроительDOM; Документ = Построитель.Прочитать(Чтение); Документ.ЭлементДокумента.УстановитьСоответствиеПространстваИмен("", ПространствоИмен, Ложь); Чтение = Новый ЧтениеУзловDOM; Чтение.Открыть(Документ); Чтение.ПерейтиКСодержимому(); ОбъектРезультат = ФабрикаXDTO.ПрочитатьXML(Чтение, ТипXDTO); | |||
| 22
    
        tan76 10.04.17✎ 15:50 | 
        как то не заработал этот вариант, видимо СтрЗаменить наше всё, буду пока его использовать.     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |