powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Builder c++ 6 + XML Data Binding и интерфейсы
12 сообщений из 12, страница 1 из 1
Builder c++ 6 + XML Data Binding и интерфейсы
    #39266661
didgik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пока не знаю что конкретно спрашивать, просто обрисую проблему.
Работал с XML через XML Data Binding, создавал классы/интерфейсы по XML файлу и особо не заморачивался как оно работает.
Понадобилось использовать XML Data Binding со схемами xsd и тут случилась подстава.
То, что билдер не смог переварить xsd-файл это я пережил. Засада случилась в самой схеме.
Рабочий XML файл выглядит приблизительно так:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
<?xml version="1.0" encoding="UTF-8"?>
<ns:Documents Version="1.0" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:ns="http://fsrar.ru/WEGAIS/WB_DOC_SINGLE_01"
  xmlns:wt="http://fsrar.ru/WEGAIS/ConfirmTicket">
  <ns:Owner>
    <ns:FSRAR_ID>010000006339</ns:FSRAR_ID>
  </ns:Owner>
  <ns:Document>
    <ns:ConfirmTicket>
      <wt:Header>
        <wt:IsConfirm>Accepted</wt:IsConfirm>
        <wt:TicketNumber>TTN-0003314515-Confirm</wt:TicketNumber>
        <wt:TicketDate>2016-02-01</wt:TicketDate>
        <wt:WBRegId>TTN-0003314515</wt:WBRegId>
        <wt:Note>Подтверждение акта приемки.(Авто)</wt:Note>
      </wt:Header>
    </ns:ConfirmTicket>
  </ns:Document>
</ns:Documents>


А xsd-схема начинается от ConfirmTicket:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
<?xml version="1.0" encoding="utf-8"?>
<xs:schema version="1.0"
           xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns:ns="http://fsrar.ru/WEGAIS/ConfirmTicket"
           targetNamespace="http://fsrar.ru/WEGAIS/ConfirmTicket"
           xmlns:c="http://fsrar.ru/WEGAIS/Common"

           elementFormDefault="qualified"
           attributeFormDefault="unqualified"
>
  <xs:import namespace="http://fsrar.ru/WEGAIS/Common" schemaLocation="EGCommon.xsd"/>
  <xs:complexType name="ConfirmTicketType">
    <xs:annotation>
      <xs:documentation>Подтверждение акта разногласий для Товарно-Транспортной Накладной</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="Identity" type="c:IdentityType" nillable="false" minOccurs="0" maxOccurs="1">
        <xs:annotation>
          <xs:documentation>Идентификатор документа (клиентский, к заполнению необязательный)</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="Header">
        <xs:complexType>
          <xs:all>
            <xs:element name="IsConfirm" type="ns:ConclusionType" minOccurs="1" maxOccurs="1">
              <xs:annotation>
                <xs:documentation>Подтвержден/не подтвержден</xs:documentation>
              </xs:annotation>
            </xs:element>
            <xs:element name="TicketNumber" type="c:NoEmptyString50" minOccurs="1" maxOccurs="1">
              <xs:annotation>
                <xs:documentation>Номер подтверждения</xs:documentation>
              </xs:annotation>
            </xs:element>
            <xs:element name="TicketDate" type="c:DateNoTime" minOccurs="1" maxOccurs="1">
              <xs:annotation>
                <xs:documentation>Дата составления подтверждения</xs:documentation>
              </xs:annotation>
            </xs:element>
            <xs:element name="WBRegId" type="c:NoEmptyString50" minOccurs="1" maxOccurs="1">
              <xs:annotation>
                <xs:documentation>ИД накладной в системе</xs:documentation>
              </xs:annotation>
            </xs:element>
            <xs:element name="Note" minOccurs="0" maxOccurs="1">
              <xs:annotation>
                <xs:documentation>Примечание</xs:documentation>
              </xs:annotation>
              <xs:simpleType>
                <xs:restriction base="xs:string">
                  <xs:maxLength value="500"/>
                </xs:restriction>
              </xs:simpleType>
            </xs:element>
          </xs:all>
        </xs:complexType>
      </xs:element>
     </xs:sequence>
  </xs:complexType>
  <xs:simpleType name="ConclusionType">
    <xs:annotation>
      <xs:documentation>Вид результата фиксации</xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:string">
      <xs:enumeration value="Accepted"/>
      <xs:enumeration value="Rejected"/>
    </xs:restriction>
  </xs:simpleType>
</xs:schema>



И вот начальный кусок XML меня ставит в тупик.
Сейчас пытаюсь делать так, - генерить по xsd схеме и подставлять туда кусок XML из файла начиная с ConfirmTicket. Но пока что-то не получается.
2 способ это к каждой схеме дописывать недостающий начальный кусок, но это несколько геморно и странно.
3 способ, в каждый сгенеренный файл прописывать недостающий кусок кода, но сдается мне, что это еще более проблемный и странный вариант.

Собственно вопрос, правильная ли моя идея с " генерить по xsd схеме и подставлять туда кусок XML из файла начиная с ConfirmTicket." и почему у меня не работает )))
...
Рейтинг: 0 / 0
Builder c++ 6 + XML Data Binding и интерфейсы
    #39266680
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
didgikА xsd-схема начинается от ConfirmTicket:Нет. Схема описывает элементы в пространстве именdidgik
Код: xml
1.
targetNamespace="http://fsrar.ru/WEGAIS/ConfirmTicket"

а именно Identy и Header. Описание Header полностью соответствует XML. Сам же XML имеет корневой элемент Documents в пространстве именdidgik
Код: xml
1.
xmlns:ns="http://fsrar.ru/WEGAIS/WB_DOC_SINGLE_01"

Вот и ищите схему для этого пространства имен. А эта схема будет внутри включать в себя приведенную схему при помощи такой конструкции
Код: xml
1.
<xs:import namespace="http://fsrar.ru/WEGAIS/ConfirmTicket" schemaLocation="YourSchema.xsd"/>

Вот именно на эту схему и нужно натравить парсер XML Data Binding и молиться, чтобы он понимал импорты и пространства имен
...
Рейтинг: 0 / 0
Builder c++ 6 + XML Data Binding и интерфейсы
    #39266699
didgik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_, спасиб, все получилось!

пространства имен к сожалению он не понимает, даже от 10 версии, но всеж меньше ручной работы.
...
Рейтинг: 0 / 0
Builder c++ 6 + XML Data Binding и интерфейсы
    #39266735
didgik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А подскажите еще такую вещь.
XML Data Binding формирует код приблизительно такого вида:
Код: plaintext
1.
2.
3.
4.
_di_IHeader_ctc __fastcall TConfirmTicketType_ctc::Get_Header()
{
  return (_di_IHeader_ctc) GetChildNodes()->Nodes[WideString("Header")];
};


но в таком виде не поддерживаться пространства имен и приходится переписывать на:
Код: plaintext
1.
2.
3.
_di_IHeader_ctc __fastcall TConfirmTicketType_ctc::Get_Header(){
  return (_di_IHeader_ctc) GetChildNodes()->FindNode(WideString("Header"), ctc_Namespace);
}


Но в таком виде пропадет фишка с автосозданием ноды при формировании XML файла.
Как бы это побороть?
...
Рейтинг: 0 / 0
Builder c++ 6 + XML Data Binding и интерфейсы
    #39266802
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
didgikКак бы это побороть?Как то так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
IXMLDOMNode __fastcall TConfirmTicketType_ctc::Get_Node(WideString AName, WideString ANS){
  IXMLDOMNode res = GetChildNodes()->FindNode(AName, ANS);
  if (!res) (
    res = OwnerDocument->CreateNode(NODE_ELEMENT, AName, ANS);
    GetChildNodes()->appendChild(res);
  }
  return res;
}

_di_IHeader_ctc __fastcall TConfirmTicketType_ctc::Get_Header(){
  return (_di_IHeader_ctc) Get_Node("Header", ctc_Namespace);
}
...
Рейтинг: 0 / 0
Builder c++ 6 + XML Data Binding и интерфейсы
    #39267008
didgik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_, да, я приблизительно так и думал, просто надеялся, может есть какой способ указывать пространство имен для текущего массива Nodes, т.е. как то упростить ручную работу по изменению автосгенерированого кода.
...
Рейтинг: 0 / 0
Builder c++ 6 + XML Data Binding и интерфейсы
    #39267029
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
didgikкак то упростить ручную работу по изменению автосгенерированого кода.Replace All GetChildNodes()->Nodes to Nodes свойство Nodes определить как приватное свойство класса TConfirmTicketType_ctc или родителя
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Builder c++ 6 + XML Data Binding и интерфейсы
    #39536842
didgik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет.
А подскажите еще ситуацию.
Есть вот такой XSD:
это CommonV3:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
<?xml version="1.0" encoding="utf-8"?>
<xs:schema version="1.0"
           xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns:ns="http://fsrar.ru/WEGAIS/CommonV3"
           xmlns:c="http://fsrar.ru/WEGAIS/Common"
           targetNamespace="http://fsrar.ru/WEGAIS/CommonV3"
           elementFormDefault="qualified"
           attributeFormDefault="unqualified"
>
  <xs:import namespace="http://fsrar.ru/WEGAIS/Common" schemaLocation="EGCommon.xsd"/>


  <!--новые схемы для помарочного учета-->
  <xs:complexType name="AMCforDocType">
    <xs:annotation>
      <xs:documentation>Список считанных кодов марок</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="amc" type="c:PDF417String" nillable="false" minOccurs="1" maxOccurs="unbounded" >
      </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="boxtype">
    <xs:sequence>
      <xs:element name="boxnum" type="c:NoEmptyString" minOccurs="1" maxOccurs="1"/>
      <xs:choice>
        <xs:element name="bl" type="ns:boxtype" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element name="boxnum" type="c:NoEmptyString" minOccurs="0" maxOccurs="unbounded"/>
      </xs:choice>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="bktype">
    <xs:annotation>
      <xs:documentation>Список считанных кодов марок</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="bk" type="c:PDF417String" nillable="false" minOccurs="1" maxOccurs="unbounded" >
      </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="boxamcType">
    <xs:annotation>
      <xs:documentation>информация об упаковке с марками</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="boxnumber" type="c:NoEmptyString" minOccurs="0" maxOccurs="1">
        <xs:annotation>
          <xs:documentation>Номер коробки(упаковки)</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="amclist" type="ns:AMCforDocType" minOccurs="0" maxOccurs="1">
        <xs:annotation>
          <xs:documentation>Перечень считанных кодов марок</xs:documentation>
        </xs:annotation>
      </xs:element>
    </xs:sequence>
  </xs:complexType>


  <xs:complexType name="MarkInfoTypeBC">
    <xs:annotation>
      <xs:documentation>Информация о марках</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="boxpos" type="ns:boxamcType" minOccurs="1" maxOccurs="unbounded">
        <xs:annotation>
          <xs:documentation>Номер коробки(упаковки)</xs:documentation>
        </xs:annotation>
      </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="InformF2TypeItemBC">
    <xs:annotation>
      <xs:documentation>Запись в справке 2 к ТТН, Информация о предыдущих отгрузках</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="F2RegId" type="c:NoEmptyString50" default="FIRSTSHIPMENT" nillable="false" minOccurs="1" maxOccurs="1">
        <xs:annotation>
          <xs:documentation>Регистрационный номер раздела справки 2</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="MarkInfo" type="ns:MarkInfoTypeBC" nillable="false"  minOccurs="0" maxOccurs="1">
        <xs:annotation>
          <xs:documentation>Информация о марках</xs:documentation>
        </xs:annotation>
      </xs:element>
    </xs:sequence>
  </xs:complexType>
  <!--новые схемы для помарочного учета-->

</xs:schema>



и сам ReplyRestBCode
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
<?xml version="1.0" encoding="utf-8"?>
<xs:schema version="1.0"
           xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns:ns="http://fsrar.ru/WEGAIS/ReplyRestBCode"
           targetNamespace="http://fsrar.ru/WEGAIS/ReplyRestBCode"
           xmlns:c="http://fsrar.ru/WEGAIS/Common"
           elementFormDefault="qualified"
           attributeFormDefault="unqualified"
           xmlns:ce="http://fsrar.ru/WEGAIS/CommonV3"
>
  <xs:import namespace="http://fsrar.ru/WEGAIS/Common" schemaLocation="EGCommon.xsd"/>
  <xs:import namespace="http://fsrar.ru/WEGAIS/CommonV3" schemaLocation="EGCommonV3.xsd"/>

  <xs:complexType name="ReplyRestBCode">
    <xs:annotation>
      <xs:documentation>Ответ на запрос об остатках по складу (сокращенный)</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="RestsDate" type="c:DateWTime" minOccurs="1" maxOccurs="1">
        <xs:annotation>
          <xs:documentation>Остатки на эту дату</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="Inform2RegId" type="c:NoEmptyString50" nillable="false" minOccurs="0" maxOccurs="1">
        <xs:annotation>
          <xs:documentation>Справка Б</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="MarkInfo" type="ce:AMCforDocType" nillable="false" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
  </xs:schema>



Проблему выдал <xs:element name="MarkInfo" type="ce:AMCforDocType" nillable="false" minOccurs="0" maxOccurs="unbounded"/>

XML Data Binding разродился приблизительно нижеследующим:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
__interface INTERFACE_UUID("{F16B2874-9CE0-41EA-9BE3-910B00A56D61}") IReplyRestBCode_rsbc : public IXMLNode
{
public:
  // Property Accessors
  virtual WideString __fastcall Get_RestsDate() = 0;
  virtual WideString __fastcall Get_Inform2RegId() = 0;
  virtual _di_IAMCforDocType_cevList __fastcall Get_MarkInfo() = 0;
  virtual void __fastcall Set_RestsDate(WideString Value) = 0;
  virtual void __fastcall Set_Inform2RegId(WideString Value) = 0;
  // Methods & Properties
  __property WideString RestsDate = { read=Get_RestsDate, write=Set_RestsDate };
  __property WideString Inform2RegId = { read=Get_Inform2RegId, write=Set_Inform2RegId };
  __property _di_IAMCforDocType_cevList MarkInfo = { read=Get_MarkInfo };

class TReplyRestBCode_rsbc : public TXMLNode, public IReplyRestBCode_rsbc
{
  __IXMLNODE_IMPL__
private:
  _di_IAMCforDocType_cevList FMarkInfo;
protected:
  // IReplyRestBCode_rsbc
  virtual WideString __fastcall Get_RestsDate();
  virtual WideString __fastcall Get_Inform2RegId();
  virtual _di_IAMCforDocType_cevList __fastcall Get_MarkInfo();
  virtual void __fastcall Set_RestsDate(WideString Value);
  virtual void __fastcall Set_Inform2RegId(WideString Value);
public:
  virtual void __fastcall AfterConstruction(void);
};
};


И теперь копилятор ругается на две строки
на первую желтую:
[C++ Error] WB_DOC_SINGLE_01.h(5962): E2462 'virtual' can only be used with non-template member functions
[C++ Error] WB_DOC_SINGLE_01.h(5962): E2344 Earlier declaration of 'IReplyRestBCode_rsbc::_di_IAMCforDocType_cevList'

на вторую:
[C++ Error] WB_DOC_SINGLE_01.h(5968): E2238 Multiple declaration for 'IReplyRestBCode_rsbc::_di_IAMCforDocType_cevList'

Собственно понятно, он не прописал в начале в интерфейсах типа:
__interface Iboxtype_cevList;
typedef System::DelphiInterface<Iboxtype_cevList> _di_Iboxtype_cevList;

вот _di_Iboxtype_cevList прописал, а _di_IAMCforDocType_cevList нет.
И в описании класса выделил только
private:
_di_IAMCforDocType_cevList FMarkInfo;
больше никаких списков так не оформлял.

Так как с XML и интерфейсами у меня в голове туго, я никак не соображу, глюк это XML Data Binding или так и должно быть.
И как побороть эту проблему.
...
Рейтинг: 0 / 0
Builder c++ 6 + XML Data Binding и интерфейсы
    #39552580
didgik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Народ, есть какие нибудь идеи? А то я так и не соображу пока что делать.
...
Рейтинг: 0 / 0
Builder c++ 6 + XML Data Binding и интерфейсы
    #39553183
didgik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Решил _di_IAMCforDocType_cevList ручками оформить по аналогии с _di_IAMCforDocType_cev
так это глюкало выдало ошибку:
...
Рейтинг: 0 / 0
Builder c++ 6 + XML Data Binding и интерфейсы
    #39553351
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
didgik, с 6-й стройкой практически не работал и насколько хорошо там работает ulink на практике не в курсе (хотя не вижу препятствий) но начиная с 2006-й полностью отказался от родного линкера
...
Рейтинг: 0 / 0
Builder c++ 6 + XML Data Binding и интерфейсы
    #39553498
didgik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xe2 выдает ошибку
Код: pascal
1.
2.
[ILINK32 Error] Error: Unresolved external '__fastcall Xml::Xmldoc::TXMLNode::~TXMLNode()' referenced from C:\USERS\USER\DOCUMENTS\RAD STUDIO\PROJECTS\WIN32\DEBUG\WB_DOC_SINGLE_01.OBJ
[ILINK32 Error] Error: Unable to perform link


а берлин линкует уже нормально. Правда не проверял, работает ли )
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Builder c++ 6 + XML Data Binding и интерфейсы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]