Autor Beitrag
Micha339
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22



BeitragVerfasst: Fr 10.06.11 00:07 
Hallo zusammen,

vorab sei gesagt, dass ich in Delphi (noch) nicht zu hause bin. Ich habe bspw. folgende XML-Datei:

ausblenden XML-Daten
1:
2:
3:
4:
5:
6:
7:
<?xml version="1.0" encoding="utf-8"?>
<data>  
  <gruppe id="grou1">
    <stueck1>NX1007</stueck1>
    <stueck2>NX1008</stueck2>
  </gruppe>
</data>


Dieses per Wizard importiert, führt zu folgender Unit:

ausblenden volle Höhe Delphi-Quelltext
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:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
{*************************************************************}
{                                                             }
{                      XML-Datenbindung                       }
{                                                             }
{         Generiert am: 09.06.2011 23:15:12                   }
{       Generiert von: \\tsclient\E\XMLFile2.xml              }
{   Einstellungen gespeichert in: \\tsclient\E\XMLFile2.xdb   }
{                                                             }
{*************************************************************}

unit XMLFile2;

interface

uses xmldom, XMLDoc, XMLIntf;

type

{ Forward-Deklarationen }

  IXMLDataType = interface;
  IXMLGruppeType = interface;

{ IXMLDataType }

  IXMLDataType = interface(IXMLNode)
    ['{590898A0-DE22-4178-9040-491BB6DC5463}']
    { Eigenschaftszugriff }
    function Get_Gruppe: IXMLGruppeType;
    { Methoden & Eigenschaften }
    property Gruppe: IXMLGruppeType read Get_Gruppe;
  end;

{ IXMLGruppeType }

  IXMLGruppeType = interface(IXMLNode)
    ['{11901C98-89C4-497D-A4DD-DF5659C5B5D7}']
    { Eigenschaftszugriff }
    function Get_Id: WideString;
    function Get_Stueck1: WideString;
    function Get_Stueck2: WideString;
    procedure Set_Id(Value: WideString);
    procedure Set_Stueck1(Value: WideString);
    procedure Set_Stueck2(Value: WideString);
    { Methoden & Eigenschaften }
    property Id: WideString read Get_Id write Set_Id;
    property Stueck1: WideString read Get_Stueck1 write Set_Stueck1;
    property Stueck2: WideString read Get_Stueck2 write Set_Stueck2;
  end;

{ Forward-Deklarationen }

  TXMLDataType = class;
  TXMLGruppeType = class;

{ TXMLDataType }

  TXMLDataType = class(TXMLNode, IXMLDataType)
  protected
    { IXMLDataType }
    function Get_Gruppe: IXMLGruppeType;
  public
    procedure AfterConstruction; override;
  end;

{ TXMLGruppeType }

  TXMLGruppeType = class(TXMLNode, IXMLGruppeType)
  protected
    { IXMLGruppeType }
    function Get_Id: WideString;
    function Get_Stueck1: WideString;
    function Get_Stueck2: WideString;
    procedure Set_Id(Value: WideString);
    procedure Set_Stueck1(Value: WideString);
    procedure Set_Stueck2(Value: WideString);
  end;

{ Globale Funktionen }

function Getdata(Doc: IXMLDocument): IXMLDataType;
function Loaddata(const FileName: WideString): IXMLDataType;
function Newdata: IXMLDataType;

const
  TargetNamespace = '';

implementation

{ Globale Funktionen }

function Getdata(Doc: IXMLDocument): IXMLDataType;
begin
  Result := Doc.GetDocBinding('data', TXMLDataType, TargetNamespace) as IXMLDataType;
end;

function Loaddata(const FileName: WideString): IXMLDataType;
begin
  Result := LoadXMLDocument(FileName).GetDocBinding('data', TXMLDataType, TargetNamespace) as IXMLDataType;
end;

function Newdata: IXMLDataType;
begin
  Result := NewXMLDocument.GetDocBinding('data', TXMLDataType, TargetNamespace) as IXMLDataType;
end;

{ TXMLDataType }

procedure TXMLDataType.AfterConstruction;
begin
  RegisterChildNode('gruppe', TXMLGruppeType);
  inherited;
end;

function TXMLDataType.Get_Gruppe: IXMLGruppeType;
begin
  Result := ChildNodes['gruppe'as IXMLGruppeType;
end;

{ TXMLGruppeType }

function TXMLGruppeType.Get_Id: WideString;
begin
  Result := AttributeNodes['id'].Text;
end;

procedure TXMLGruppeType.Set_Id(Value: WideString);
begin
  SetAttribute('id', Value);
end;

function TXMLGruppeType.Get_Stueck1: WideString;
begin
  Result := ChildNodes['stueck1'].Text;
end;

procedure TXMLGruppeType.Set_Stueck1(Value: WideString);
begin
  ChildNodes['stueck1'].NodeValue := Value;
end;

function TXMLGruppeType.Get_Stueck2: WideString;
begin
  Result := ChildNodes['stueck2'].Text;
end;

procedure TXMLGruppeType.Set_Stueck2(Value: WideString);
begin
  ChildNodes['stueck2'].NodeValue := Value;
end;

end.


Wenn ich nun bspw.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
var gr: IXMLDataType;
begin
    gr := Newdata();
    gr.Gruppe.Id:='hallo';
    with gr as  IXMLNode do
    begin
      ownerDocument.SaveToFile('C:\erg1.xml');
    end;
end;


ausführe, erhalte ich das Ergebnis
ausblenden XML-Daten
1:
2:
<?xml version="1.0"?>
<data><gruppe id="hallo"/></data>


Was muss ich aber machen, wenn ich folgendes Ergebnis (default alle Knoten vorhanden, aber empty) nur mit der Anweisung gr := Newdata(); haben möchte, ohne jeden einzelnen Knoten "von Hand" setzen zu müssen?
ausblenden XML-Daten
1:
2:
3:
4:
5:
6:
7:
<?xml version="1.0" encoding="utf-8"?>
<data>  
  <gruppe>
    <stueck1 />
    <stueck2 />
  </gruppe>
</data>


Danke für Eure Tipps.
Grüße
Micha
MSCH
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1448
Erhaltene Danke: 3

W7 64
XE2, SQL, DevExpress, DevArt, Oracle, SQLServer
BeitragVerfasst: Sa 03.09.11 13:20 
hi,
imho geht das nicht. Du müsstest leere Knoten anlegen (Gruppe.add()).
:-Msch

_________________
ist das politisch, wenn ich linksdrehenden Joghurt haben möchte?