XML mapper ... XE2 - PullRequest
       23

XML mapper ... XE2

2 голосов
/ 28 декабря 2011

У меня есть xml от веб-сервиса, который я хочу сохранить в ClientDataSet.

При использовании картографа XML данные не отображаются в сетке (при использовании «Создать и проверить преобразование»), поэтому я не могу использовать файл преобразования ...

Вот некоторые из ответов XML от веб-службы C # (одна строка данных) ...

<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
<soap:Body>
<AllResponse xmlns="http://some.url.com/">
<AllResult>
<xs:schema xmlns="" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:xs="http://www.w3.org/2001/XMLSchema" id="NewDataSet">
<xs:element msdata:UseCurrentLocale="true" msdata:IsDataSet="true" name="NewDataSet">
<xs:complexType>
<xs:choice maxOccurs="unbounded" minOccurs="0">
<xs:element name="Table">
<xs:complexType>
<xs:sequence>
<xs:element name="Id" minOccurs="0" type="xs:string"/>
<xs:element name="UserName" minOccurs="0" type="xs:string"/>
<xs:element name="Name" minOccurs="0" type="xs:string"/>
<xs:element name="PhoneInt" minOccurs="0" type="xs:string"/>
<xs:element name="CostCentre" minOccurs="0" type="xs:int"/>
<xs:element name="GroupRoleNameDK" minOccurs="0" type="xs:string"/>
<xs:element name="GroupRoleNameUK" minOccurs="0" type="xs:string"/>
<xs:element name="Email" minOccurs="0" type="xs:string"/>
<xs:element name="Url" minOccurs="0" type="xs:string"/>
<xs:element name="PhoneAlt" minOccurs="0" type="xs:string"/>
<xs:element name="PhoneMobile" minOccurs="0" type="xs:string"/>
<xs:element name="Fax" minOccurs="0" type="xs:string"/>
<xs:element name="EducationNameDK" minOccurs="0" type="xs:string"/>
<xs:element name="EducationNameUK" minOccurs="0" type="xs:string"/>
<xs:element name="Location" minOccurs="0" type="xs:string"/>
<xs:element name="PhoneNote" minOccurs="0" type="xs:string"/>
<xs:element name="Personid" minOccurs="0" type="xs:int"/>
<xs:element name="GroupId" minOccurs="0" type="xs:int"/>
<xs:element name="GroupNameDK" minOccurs="0" type="xs:string"/>
<xs:element name="GroupNameUK" minOccurs="0" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
<diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
<NewDataSet xmlns="">
<Table diffgr:id="Table1" msdata:rowOrder="0">
<Id>P-4</Id>
<UserName>auser</UserName>
<Name>Somename</Name>
<PhoneInt>aPhone</PhoneInt>
<CostCentre>0</CostCentre>
<GroupRoleNameDK>WebService</GroupRoleNameDK>
<GroupRoleNameUK>WebService</GroupRoleNameUK>
<Email>aname@acompany.com</Email>
<Url>http://www.embarcadero.com</Url>
<PhoneMobile>12345678</PhoneMobile>
<Fax>87654321</Fax>
<Personid>4</Personid>
<GroupId>618</GroupId>
<GroupNameDK>Danish Group</GroupNameDK>
<GroupNameUK>GroupName</GroupNameUK>
</Table>
</NewDataSet>
</diffgr:diffgram>
</AllResult>
</AllResponse>
</soap:Body>
</soap:Envelope>

Схема, кажется, хорошо определена, так что я немного озадачен, почему это не работает Я заметил, что некоторые из полей имеют вместо когда поле пусто - не знает, имеет ли это значение ...

Есть идеи, как мне ладить?

-Kurt

Ответы [ 2 ]

0 голосов
/ 03 января 2012

Ответ состоял в том, что мне нужно было изменить файл .XTR в первой строке. См. Статью Дипака http://www.agnisoft.com/white_papers/soap1.asp

Цитата:

Причина в том, что XML-преобразование Delphiпровайдеру не нравится «soap:» в первом элементе атрибута «from» (и все такие пространства имен в «source»).Это может быть исправлено в некотором пакете обновлений, поэтому этот пункт может не применяться

Это не исправлено в Delphi XE2 ...

-Kurt

0 голосов
/ 28 декабря 2011

Ответ содержит две части: определение схемы XML, как в документе XSD, и часть данных.

Если мастеру привязки данных XML в XE2 не нравится этот формат, я бы

  • извлечь часть схемы (один раз) и создать из нее XSD, которая может быть обработана мастером

  • извлечь часть данных из документа XML (для каждого ответа) и передать его компоненту преобразования

...