sddk
sddk

Reputation: 1115

Delphi 2007 xsd Import

The file that i want to import is here. After import wizard, when i try to compile my project, Delphi says

Identifier redeclared: 'IXMLNodeList'.

I tried to delete one of redeclared 'IXMLNodeList' but this time Delphi says

Type 'IXMLNode' is not yet completely defined.

Same xsd file can be converted with xsd.exe (a tool of .Net Framework) and built vith Visual Studio 2013.

Is this is a bug? Or am i doing something wrong? Is there another way to generate *.pas file?

The *.pas file that was generated with Delphi 2007. (implementation section deleted since character limit is 30000)

{**********************************************}
{                                              }
{             XML Data Binding                 }
{                                              }
{         Generated on: 27.8.2015 12:46:19     }
{       Generated from: D:\temp\testData.xsd   }
{   Settings stored in: D:\temp\testData.xdb   }
{                                              }
{**********************************************}

unit testData;

interface

uses xmldom, XMLDoc, XMLIntf;

type

{ Forward Decls }

  IXMLArrayDim = interface;
  IXMLHeader = interface;
  IXMLSymbolConfigObject = interface;
  IXMLProjectInfo = interface;
  IXMLSymbolconfiguration = interface;
  IXMLTypeList = interface;
  IXMLTypeSimple = interface;
  IXMLTypeSimpleList = interface;
  IXMLTypeUserDef = interface;
  IXMLTypeUserDefList = interface;
  IXMLUserDefElement = interface;
  IXMLTypeArray = interface;
  IXMLTypeArrayList = interface;
  IXMLNodeList = interface;
  IXMLNode = interface;
  IXMLNodeList = interface;

{ IXMLArrayDim }

  IXMLArrayDim = interface(IXMLNode)
    ['{B668E24B-E08D-4E8A-9687-8D50FE3141DA}']
    { Property Accessors }
    function Get_Minrange: Integer;
    function Get_Maxrange: Integer;
    procedure Set_Minrange(Value: Integer);
    procedure Set_Maxrange(Value: Integer);
    { Methods & Properties }
    property Minrange: Integer read Get_Minrange write Set_Minrange;
    property Maxrange: Integer read Get_Maxrange write Set_Maxrange;
  end;

{ IXMLHeader }

  IXMLHeader = interface(IXMLNode)
    ['{679233BE-93E7-42C9-B429-CF8F8B81A2BD}']
    { Property Accessors }
    function Get_Version: WideString;
    function Get_SymbolConfigObject: IXMLSymbolConfigObject;
    function Get_ProjectInfo: IXMLProjectInfo;
    procedure Set_Version(Value: WideString);
    { Methods & Properties }
    property Version: WideString read Get_Version write Set_Version;
    property SymbolConfigObject: IXMLSymbolConfigObject read Get_SymbolConfigObject;
    property ProjectInfo: IXMLProjectInfo read Get_ProjectInfo;
  end;

{ IXMLSymbolConfigObject }

  IXMLSymbolConfigObject = interface(IXMLNode)
    ['{FEBFF4CE-1B1F-4894-A90A-5C976FA5541B}']
    { Property Accessors }
    function Get_Version: WideString;
    procedure Set_Version(Value: WideString);
    { Methods & Properties }
    property Version: WideString read Get_Version write Set_Version;
  end;

{ IXMLProjectInfo }

  IXMLProjectInfo = interface(IXMLNode)
    ['{5D629B4B-8BB7-4627-A2D0-9B6ABD037F79}']
    { Property Accessors }
    function Get_Name: WideString;
    function Get_Devicename: WideString;
    function Get_Appname: WideString;
    procedure Set_Name(Value: WideString);
    procedure Set_Devicename(Value: WideString);
    procedure Set_Appname(Value: WideString);
    { Methods & Properties }
    property Name: WideString read Get_Name write Set_Name;
    property Devicename: WideString read Get_Devicename write Set_Devicename;
    property Appname: WideString read Get_Appname write Set_Appname;
  end;

{ IXMLSymbolconfiguration }

  IXMLSymbolconfiguration = interface(IXMLNode)
    ['{B3CA7842-0593-485A-9B70-A17210F3DE47}']
    { Property Accessors }
    function Get_Header: IXMLHeader;
    function Get_TypeList: IXMLTypeList;
    function Get_NodeList: IXMLNodeList;
    { Methods & Properties }
    property Header: IXMLHeader read Get_Header;
    property TypeList: IXMLTypeList read Get_TypeList;
    property NodeList: IXMLNodeList read Get_NodeList;
  end;

{ IXMLTypeList }

  IXMLTypeList = interface(IXMLNode)
    ['{4F506F8A-9093-4B65-B3F6-CE04F4AA2B6A}']
    { Property Accessors }
    function Get_TypeSimple: IXMLTypeSimpleList;
    function Get_TypeUserDef: IXMLTypeUserDefList;
    function Get_TypeArray: IXMLTypeArrayList;
    { Methods & Properties }
    property TypeSimple: IXMLTypeSimpleList read Get_TypeSimple;
    property TypeUserDef: IXMLTypeUserDefList read Get_TypeUserDef;
    property TypeArray: IXMLTypeArrayList read Get_TypeArray;
  end;

{ IXMLTypeSimple }

  IXMLTypeSimple = interface(IXMLNode)
    ['{99ACCF81-AE73-4848-96D1-465B02B09732}']
    { Property Accessors }
    function Get_Name: WideString;
    function Get_Size: Integer;
    function Get_Swapsize: Integer;
    function Get_Typeclass: WideString;
    function Get_Iecname: WideString;
    function Get_Bitoffset: Integer;
    procedure Set_Name(Value: WideString);
    procedure Set_Size(Value: Integer);
    procedure Set_Swapsize(Value: Integer);
    procedure Set_Typeclass(Value: WideString);
    procedure Set_Iecname(Value: WideString);
    procedure Set_Bitoffset(Value: Integer);
    { Methods & Properties }
    property Name: WideString read Get_Name write Set_Name;
    property Size: Integer read Get_Size write Set_Size;
    property Swapsize: Integer read Get_Swapsize write Set_Swapsize;
    property Typeclass: WideString read Get_Typeclass write Set_Typeclass;
    property Iecname: WideString read Get_Iecname write Set_Iecname;
    property Bitoffset: Integer read Get_Bitoffset write Set_Bitoffset;
  end;

{ IXMLTypeSimpleList }

  IXMLTypeSimpleList = interface(IXMLNodeCollection)
    ['{9FF4D34E-53A0-4C6E-A123-15DC9ECB86D9}']
    { Methods & Properties }
    function Add: IXMLTypeSimple;
    function Insert(const Index: Integer): IXMLTypeSimple;
    function Get_Item(Index: Integer): IXMLTypeSimple;
    property Items[Index: Integer]: IXMLTypeSimple read Get_Item; default;
  end;

{ IXMLTypeUserDef }

  IXMLTypeUserDef = interface(IXMLNodeCollection)
    ['{9FE7B6CE-0B86-499E-A039-A0939B5DE3A5}']
    { Property Accessors }
    function Get_Name: WideString;
    function Get_Size: Integer;
    function Get_Nativesize: Integer;
    function Get_Typeclass: WideString;
    function Get_Iecname: WideString;
    function Get_UserDefElement(Index: Integer): IXMLUserDefElement;
    procedure Set_Name(Value: WideString);
    procedure Set_Size(Value: Integer);
    procedure Set_Nativesize(Value: Integer);
    procedure Set_Typeclass(Value: WideString);
    procedure Set_Iecname(Value: WideString);
    { Methods & Properties }
    function Add: IXMLUserDefElement;
    function Insert(const Index: Integer): IXMLUserDefElement;
    property Name: WideString read Get_Name write Set_Name;
    property Size: Integer read Get_Size write Set_Size;
    property Nativesize: Integer read Get_Nativesize write Set_Nativesize;
    property Typeclass: WideString read Get_Typeclass write Set_Typeclass;
    property Iecname: WideString read Get_Iecname write Set_Iecname;
    property UserDefElement[Index: Integer]: IXMLUserDefElement read Get_UserDefElement; default;
  end;

{ IXMLTypeUserDefList }

  IXMLTypeUserDefList = interface(IXMLNodeCollection)
    ['{52B0116E-85CB-4299-988F-0EDA565597FA}']
    { Methods & Properties }
    function Add: IXMLTypeUserDef;
    function Insert(const Index: Integer): IXMLTypeUserDef;
    function Get_Item(Index: Integer): IXMLTypeUserDef;
    property Items[Index: Integer]: IXMLTypeUserDef read Get_Item; default;
  end;

{ IXMLUserDefElement }

  IXMLUserDefElement = interface(IXMLNode)
    ['{09C1780A-D3BB-4EF0-ABB8-87C3C2A7D164}']
    { Property Accessors }
    function Get_Type_: WideString;
    function Get_Iecname: WideString;
    function Get_Byteoffset: Integer;
    procedure Set_Type_(Value: WideString);
    procedure Set_Iecname(Value: WideString);
    procedure Set_Byteoffset(Value: Integer);
    { Methods & Properties }
    property Type_: WideString read Get_Type_ write Set_Type_;
    property Iecname: WideString read Get_Iecname write Set_Iecname;
    property Byteoffset: Integer read Get_Byteoffset write Set_Byteoffset;
  end;

{ IXMLTypeArray }

  IXMLTypeArray = interface(IXMLNodeCollection)
    ['{5B1E6A12-D05F-4B0D-B7DF-4CAE0F51D0F7}']
    { Property Accessors }
    function Get_Name: WideString;
    function Get_Size: Integer;
    function Get_Nativesize: Integer;
    function Get_Typeclass: WideString;
    function Get_Basetype: WideString;
    function Get_Iecname: WideString;
    function Get_ArrayDim(Index: Integer): IXMLArrayDim;
    procedure Set_Name(Value: WideString);
    procedure Set_Size(Value: Integer);
    procedure Set_Nativesize(Value: Integer);
    procedure Set_Typeclass(Value: WideString);
    procedure Set_Basetype(Value: WideString);
    procedure Set_Iecname(Value: WideString);
    { Methods & Properties }
    function Add: IXMLArrayDim;
    function Insert(const Index: Integer): IXMLArrayDim;
    property Name: WideString read Get_Name write Set_Name;
    property Size: Integer read Get_Size write Set_Size;
    property Nativesize: Integer read Get_Nativesize write Set_Nativesize;
    property Typeclass: WideString read Get_Typeclass write Set_Typeclass;
    property Basetype: WideString read Get_Basetype write Set_Basetype;
    property Iecname: WideString read Get_Iecname write Set_Iecname;
    property ArrayDim[Index: Integer]: IXMLArrayDim read Get_ArrayDim; default;
  end;

{ IXMLTypeArrayList }

  IXMLTypeArrayList = interface(IXMLNodeCollection)
    ['{44BC02D7-A6E9-4E4E-8FC1-F4D7481CBCF4}']
    { Methods & Properties }
    function Add: IXMLTypeArray;
    function Insert(const Index: Integer): IXMLTypeArray;
    function Get_Item(Index: Integer): IXMLTypeArray;
    property Items[Index: Integer]: IXMLTypeArray read Get_Item; default;
  end;

{ IXMLNodeList }

  IXMLNodeList = interface(IXMLNodeCollection)
    ['{A9F27BF3-5720-4687-931A-B4C7AF13919A}']
    { Property Accessors }
    function Get_Node(Index: Integer): IXMLNode;
    { Methods & Properties }
    function Add: IXMLNode;
    function Insert(const Index: Integer): IXMLNode;
    property Node[Index: Integer]: IXMLNode read Get_Node; default;
  end;

{ IXMLNode }

  IXMLNode = interface(IXMLNode)
    ['{69BBFB83-04B8-47D0-9A64-F7E6DDE649F7}']
    { Property Accessors }
    function Get_Name: WideString;
    function Get_Type_: WideString;
    function Get_Access: WideString;
    function Get_Area: Integer;
    function Get_Offset: Integer;
    function Get_Directaddress: WideString;
    function Get_Node: IXMLNodeList;
    function Get_Comment: WideString;
    procedure Set_Name(Value: WideString);
    procedure Set_Type_(Value: WideString);
    procedure Set_Access(Value: WideString);
    procedure Set_Area(Value: Integer);
    procedure Set_Offset(Value: Integer);
    procedure Set_Directaddress(Value: WideString);
    procedure Set_Comment(Value: WideString);
    { Methods & Properties }
    property Name: WideString read Get_Name write Set_Name;
    property Type_: WideString read Get_Type_ write Set_Type_;
    property Access: WideString read Get_Access write Set_Access;
    property Area: Integer read Get_Area write Set_Area;
    property Offset: Integer read Get_Offset write Set_Offset;
    property Directaddress: WideString read Get_Directaddress write Set_Directaddress;
    property Node: IXMLNodeList read Get_Node;
    property Comment: WideString read Get_Comment write Set_Comment;
  end;

{ IXMLNodeList }

  IXMLNodeList = interface(IXMLNodeCollection)
    ['{0E766622-8449-47F9-AD37-444847F37385}']
    { Methods & Properties }
    function Add: IXMLNode;
    function Insert(const Index: Integer): IXMLNode;
    function Get_Item(Index: Integer): IXMLNode;
    property Items[Index: Integer]: IXMLNode read Get_Item; default;
  end;

{ Forward Decls }

  TXMLArrayDim = class;
  TXMLHeader = class;
  TXMLSymbolConfigObject = class;
  TXMLProjectInfo = class;
  TXMLSymbolconfiguration = class;
  TXMLTypeList = class;
  TXMLTypeSimple = class;
  TXMLTypeSimpleList = class;
  TXMLTypeUserDef = class;
  TXMLTypeUserDefList = class;
  TXMLUserDefElement = class;
  TXMLTypeArray = class;
  TXMLTypeArrayList = class;
  TXMLNodeList = class;
  TXMLNode = class;
  TXMLNodeList = class;

{ TXMLArrayDim }

  TXMLArrayDim = class(TXMLNode, IXMLArrayDim)
  protected
    { IXMLArrayDim }
    function Get_Minrange: Integer;
    function Get_Maxrange: Integer;
    procedure Set_Minrange(Value: Integer);
    procedure Set_Maxrange(Value: Integer);
  end;

{ TXMLHeader }

  TXMLHeader = class(TXMLNode, IXMLHeader)
  protected
    { IXMLHeader }
    function Get_Version: WideString;
    function Get_SymbolConfigObject: IXMLSymbolConfigObject;
    function Get_ProjectInfo: IXMLProjectInfo;
    procedure Set_Version(Value: WideString);
  public
    procedure AfterConstruction; override;
  end;

{ TXMLSymbolConfigObject }

  TXMLSymbolConfigObject = class(TXMLNode, IXMLSymbolConfigObject)
  protected
    { IXMLSymbolConfigObject }
    function Get_Version: WideString;
    procedure Set_Version(Value: WideString);
  end;

{ TXMLProjectInfo }

  TXMLProjectInfo = class(TXMLNode, IXMLProjectInfo)
  protected
    { IXMLProjectInfo }
    function Get_Name: WideString;
    function Get_Devicename: WideString;
    function Get_Appname: WideString;
    procedure Set_Name(Value: WideString);
    procedure Set_Devicename(Value: WideString);
    procedure Set_Appname(Value: WideString);
  end;

{ TXMLSymbolconfiguration }

  TXMLSymbolconfiguration = class(TXMLNode, IXMLSymbolconfiguration)
  protected
    { IXMLSymbolconfiguration }
    function Get_Header: IXMLHeader;
    function Get_TypeList: IXMLTypeList;
    function Get_NodeList: IXMLNodeList;
  public
    procedure AfterConstruction; override;
  end;

{ TXMLTypeList }

  TXMLTypeList = class(TXMLNode, IXMLTypeList)
  private
    FTypeSimple: IXMLTypeSimpleList;
    FTypeUserDef: IXMLTypeUserDefList;
    FTypeArray: IXMLTypeArrayList;
  protected
    { IXMLTypeList }
    function Get_TypeSimple: IXMLTypeSimpleList;
    function Get_TypeUserDef: IXMLTypeUserDefList;
    function Get_TypeArray: IXMLTypeArrayList;
  public
    procedure AfterConstruction; override;
  end;

{ TXMLTypeSimple }

  TXMLTypeSimple = class(TXMLNode, IXMLTypeSimple)
  protected
    { IXMLTypeSimple }
    function Get_Name: WideString;
    function Get_Size: Integer;
    function Get_Swapsize: Integer;
    function Get_Typeclass: WideString;
    function Get_Iecname: WideString;
    function Get_Bitoffset: Integer;
    procedure Set_Name(Value: WideString);
    procedure Set_Size(Value: Integer);
    procedure Set_Swapsize(Value: Integer);
    procedure Set_Typeclass(Value: WideString);
    procedure Set_Iecname(Value: WideString);
    procedure Set_Bitoffset(Value: Integer);
  end;

{ TXMLTypeSimpleList }

  TXMLTypeSimpleList = class(TXMLNodeCollection, IXMLTypeSimpleList)
  protected
    { IXMLTypeSimpleList }
    function Add: IXMLTypeSimple;
    function Insert(const Index: Integer): IXMLTypeSimple;
    function Get_Item(Index: Integer): IXMLTypeSimple;
  end;

{ TXMLTypeUserDef }

  TXMLTypeUserDef = class(TXMLNodeCollection, IXMLTypeUserDef)
  protected
    { IXMLTypeUserDef }
    function Get_Name: WideString;
    function Get_Size: Integer;
    function Get_Nativesize: Integer;
    function Get_Typeclass: WideString;
    function Get_Iecname: WideString;
    function Get_UserDefElement(Index: Integer): IXMLUserDefElement;
    procedure Set_Name(Value: WideString);
    procedure Set_Size(Value: Integer);
    procedure Set_Nativesize(Value: Integer);
    procedure Set_Typeclass(Value: WideString);
    procedure Set_Iecname(Value: WideString);
    function Add: IXMLUserDefElement;
    function Insert(const Index: Integer): IXMLUserDefElement;
  public
    procedure AfterConstruction; override;
  end;

{ TXMLTypeUserDefList }

  TXMLTypeUserDefList = class(TXMLNodeCollection, IXMLTypeUserDefList)
  protected
    { IXMLTypeUserDefList }
    function Add: IXMLTypeUserDef;
    function Insert(const Index: Integer): IXMLTypeUserDef;
    function Get_Item(Index: Integer): IXMLTypeUserDef;
  end;

{ TXMLUserDefElement }

  TXMLUserDefElement = class(TXMLNode, IXMLUserDefElement)
  protected
    { IXMLUserDefElement }
    function Get_Type_: WideString;
    function Get_Iecname: WideString;
    function Get_Byteoffset: Integer;
    procedure Set_Type_(Value: WideString);
    procedure Set_Iecname(Value: WideString);
    procedure Set_Byteoffset(Value: Integer);
  end;

{ TXMLTypeArray }

  TXMLTypeArray = class(TXMLNodeCollection, IXMLTypeArray)
  protected
    { IXMLTypeArray }
    function Get_Name: WideString;
    function Get_Size: Integer;
    function Get_Nativesize: Integer;
    function Get_Typeclass: WideString;
    function Get_Basetype: WideString;
    function Get_Iecname: WideString;
    function Get_ArrayDim(Index: Integer): IXMLArrayDim;
    procedure Set_Name(Value: WideString);
    procedure Set_Size(Value: Integer);
    procedure Set_Nativesize(Value: Integer);
    procedure Set_Typeclass(Value: WideString);
    procedure Set_Basetype(Value: WideString);
    procedure Set_Iecname(Value: WideString);
    function Add: IXMLArrayDim;
    function Insert(const Index: Integer): IXMLArrayDim;
  public
    procedure AfterConstruction; override;
  end;

{ TXMLTypeArrayList }

  TXMLTypeArrayList = class(TXMLNodeCollection, IXMLTypeArrayList)
  protected
    { IXMLTypeArrayList }
    function Add: IXMLTypeArray;
    function Insert(const Index: Integer): IXMLTypeArray;
    function Get_Item(Index: Integer): IXMLTypeArray;
  end;

{ TXMLNodeList }

  TXMLNodeList = class(TXMLNodeCollection, IXMLNodeList)
  protected
    { IXMLNodeList }
    function Get_Node(Index: Integer): IXMLNode;
    function Add: IXMLNode;
    function Insert(const Index: Integer): IXMLNode;
  public
    procedure AfterConstruction; override;
  end;

{ TXMLNode }

  TXMLNode = class(TXMLNode, IXMLNode)
  private
    FNode: IXMLNodeList;
  protected
    { IXMLNode }
    function Get_Name: WideString;
    function Get_Type_: WideString;
    function Get_Access: WideString;
    function Get_Area: Integer;
    function Get_Offset: Integer;
    function Get_Directaddress: WideString;
    function Get_Node: IXMLNodeList;
    function Get_Comment: WideString;
    procedure Set_Name(Value: WideString);
    procedure Set_Type_(Value: WideString);
    procedure Set_Access(Value: WideString);
    procedure Set_Area(Value: Integer);
    procedure Set_Offset(Value: Integer);
    procedure Set_Directaddress(Value: WideString);
    procedure Set_Comment(Value: WideString);
  public
    procedure AfterConstruction; override;
  end;

{ TXMLNodeList }

  TXMLNodeList = class(TXMLNodeCollection, IXMLNodeList)
  protected
    { IXMLNodeList }
    function Add: IXMLNode;
    function Insert(const Index: Integer): IXMLNode;
    function Get_Item(Index: Integer): IXMLNode;
  end;

Upvotes: 3

Views: 1987

Answers (1)

mjn
mjn

Reputation: 36654

The Delphi XSD importer adds a IXML prefix to every type. For your XSD, the resulting (generated) interface names collide with interface names of the Delphi XML framework:

...
<xs:element name="Node">
...
<xs:element name="NodeList">
...

These element type declarations in the XSD cause the generation of the interface types { IXMLNode } and { IXMLNodeList }.


Potential workaround based on whosrdaddy comment: rename the conflicting type names in the XML Data Binding Wizard. The screenshot shows that the identifier name is editable and I added an underscore to rename it from IXMLNodeList to IXML_NodeList.

XML Data Binding Wizard

Upvotes: 3

Related Questions