Problem bei der Erzeugung von komplexen Typen, während der Verwendung von XML-Datenbindung

StackOverflow https://stackoverflow.com/questions/4024763

  •  26-09-2019
  •  | 
  •  

Frage

Ich bin mit XML Data Mapping und habe ein Problem mit der Erzeugung von komplexen Typen während Sie es.

Wenn ich ein XML habe wie unter seinen Arbeits feinen

<?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>

Ich bin immer komplexe Typen wie SampleType, ConnectionType and ItemType.

Aber wenn ich die XML wie

<?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>

Ich bin immer komplexe Typen wie SampleType, ConnectionType, ItemType, ItemType2, ItemType22, ItemType222, ItemType2222, and ItemType22222 das heißt, waren itemTypes gleich Anzahl der Elemente in der XML.

Warum dies geschieht und wie kann ich dieses Problem lösen?.

War es hilfreich?

Lösung

Es ist, weil die Daten-Mapper nicht zu schließen Daten aus einer XML-Datei (oder besser laut XML-Dokument) gemeint ist, sondern von einem XML-Schema .

Ein XML-Schema beschreibt die Syntax ein XML-Dokument haften sollte.

kann XML-Schema zum Beispiel als XSD-Dateien gespeichert werden, oder DTD-Dateien.

So ist der erste Schritt, den Sie nehmen sollen, ist ein XSD-Schema zu erstellen. Sie könnten mit Erzeugen eines XSD aus dem XML starten, dann Polieren, dass XSD.

Die Online- XML-2-XSD Tool können Sie helfen mit, dass XSD zu erzeugen, aber es gibt viele weitere Werkzeuge.

Dann, dass XSD im Data Mapper verwenden, und Sie machen eine viel bessere Chance.

Hinweis: XML-Typen definiert sind, anders als die meisten Programmiersprachen, so dass Sie nicht immer Ihre XML-Datentypen in Delphi abbilden können. Ihr einfacher Fall funktionieren wird, aber sobald Sie Rekursion oder null in XML zu tun, kann es ganz schön haarig.

Bearbeiten :. Hinzugefügt XSD Probe für beide XML-Dokumente

Ich benutzen XmlForAsp die XSD zu schließen, so dass Sie einen Kopf starten.

Die abgeleitete XSD sowohl für das erste und die zweite XML-Dokument ist das gleiche:

<?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>

- jeroen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top