Проблема создания сложных типов при использовании привязки данных XML - PullRequest
3 голосов
/ 26 октября 2010

Я использую XML Data Mapping и у меня возникают проблемы с генерацией сложных типов при его использовании.

Если у меня XML, как показано ниже, он работает нормально

<?xml version="1.0" standalone="yes" ?>
<Sample>
      <connection>
        <item  Name="ABC">123</item>
        <item  Name="XYZ">123</item>
        <item  Name="MNO">123</item>
      </connection>
      <connection>
        <item  Name="ABC">123</item>
        <item  Name="XYZ">123</item>
        <item  Name="MNO">123</item>
      </connection>
</Sample>

Я получаюсложные типы как SampleType, ConnectionType and ItemType.

Но если у меня есть XML как

<?xml version="1.0" standalone="yes" ?>
<Sample>
      <connection>
        <item  Name="ABC"/>
        <item  Name="XYZ"/>
        <item  Name="MNO"/>
      </connection>
      <connection>
        <item  Name="ABC"/>
        <item  Name="XYZ"/>
        <item  Name="MNO"/>
      </connection>
</Sample>

, я получаю сложные типы как SampleType, ConnectionType, ItemType, ItemType2, ItemType22, ItemType222, ItemType2222, and ItemType22222, т.е. ItemTypes были равны количеству элементов, присутствующих вXML.

Почему это происходит и как я могу решить эту проблему?.

1 Ответ

2 голосов
/ 26 октября 2010

Это связано с тем, что средство отображения данных предназначено не для вывода данных из файла XML (или лучше сформулированного документа XML), а из схемы XML .

Схема XML описываетсинтаксис, которому должен соответствовать XML-документ.

Схемы XML могут, например, храниться в виде файлов XSD или DTD.

Поэтому первый шаг, который вы должны сделать, - это создать схему XSD.Вы можете начать с создания XSD из XML, а затем отшлифовать этот XSD.

Онлайн-инструмент XML-2-XSD может помочь вам с генерацией этого XSD, но есть еще много инструментов.

Затем используйте этот XSD в преобразователе данных, и у вас будет гораздо больше шансов.

Примечание. Типы XML определяются не так, как большинство языков программирования, поэтому вы не всегда можете отобразить данные XMLпечатает на Delphi.Ваш простой случай сработает, но как только вы выполните рекурсию или обнулите в XML, он может стать довольно сложным.

Редактировать : добавлен образец XSD для обоих документов XML.

Я использовал XmlForAsp для вывода XSD , поэтому у вас есть преимущество.

Выведенный XSD для первого и второго XML-документа одинаков:

<?xml version="1.0" encoding="utf-16"?>
<xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" version="1.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:element name="Sample" type="SampleType" />
  <xsd:complexType name="SampleType">
    <xsd:sequence>
      <xsd:element maxOccurs="unbounded" name="connection" type="connectionType" />
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="connectionType">
    <xsd:sequence>
      <xsd:element maxOccurs="unbounded" name="item" type="itemType" />
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="itemType">
    <xsd:attribute name="Name" type="xsd:string" />
  </xsd:complexType>
</xsd:schema>

- Йерун

...