|
Ошибка модели 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
|
как то не заработал этот вариант, видимо СтрЗаменить наше всё, буду пока его использовать.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |