Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / XML-парсинг / 10 сообщений из 10, страница 1 из 1
01.12.2003, 12:49
    #32339276
xyz777
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML-парсинг
добрый день мастера!
есть исходный xml файл..

не подскажете как считывать значения тегов и атрибутов автоматически и записать хотя бы в массив?
типа arr[1]= "Vasya Pupkin";
arr[2]="7269C18D00010000005E";
и так далее

применил XMLDocument, но нихрена не понял.. примерчик какой нить адйте..

заране спасибо..

<document>
<bank>
<customer name="Vasya Pupkin"
<merchant cert_id="7269C18D00010000005E" name="Delphi
<order order_id="282" amount="3100" currency="398">
<department merchant_id="90028101" amount="1300"/>
</order>
</merchant>
<merchant_sign type="RSA">
p25i1rUH7StnhOfnkHSOHguuPMePaGXtiPGEOrJE4bof1gFVH19mhDyHjfWa6OeJ80fidyvVf1X4
ewyP0yG4GxJSl0VyXz7+PNLsbs1lJe42d1fixvozhJSSYN6fAxMN8hhDht6S81YK3GbDTE7GH498
pU9HGuGAoDVjB+NtrHk=
</merchant_sign>
</customer>
<customer_sign type="SSL">
4817C411000100000084
</customer_sign>
<results timestamp="4/6/2001 2:52:44 PM">
</results>
</bank>

<bank_sign cert_id="14276668000100000028" type="SHA/RSA">
JI3RZMEvexNlDmKsOQhe0pzHuKijnbhvnLu99qh7h+Ju8HvSfGNbEJxXUL58M94tXvu7w0BXSY7M
HePGqz32JuMLAncuzyMwq845linW/sH/WvbZ+6SSYfxDMnvgX0S/pKxbhSXs7lGVBngXOwq7Bhsk
8GcDUkWAM5UAsKpEKoI=
</bank_sign>
</document>
...
Рейтинг: 0 / 0
01.12.2003, 13:24
    #32339334
Teo
Teo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML-парсинг
В Delphi 6 есть такая приблуда XML Data Binding назвается...
Скармливаешь ей XML-файло и она тебе генерит готовый парсер...
Вызывается она File->New->Other... далее вкладка New...
...
Рейтинг: 0 / 0
01.12.2003, 15:07
    #32339541
Mihail R.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML-парсинг
у меня Delphi7, там в каталогах C:\Program Files\Borland\Delphi7\Demos\Internet\XML* куча примеров. очень популярно разобрано.
...
Рейтинг: 0 / 0
01.12.2003, 15:17
    #32339559
Teo
Teo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML-парсинг
XML Data Binding есть и в Delphi 7...
...
Рейтинг: 0 / 0
01.12.2003, 16:12
    #32339650
xyz777
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML-парсинг
а как использовать этот модуль XML Data Binding ?? фнукции не доступны :( подскажите чайнику..

use modul я это сдеала.. но млин там тока 3 функции public.. newdocumdent, loaddocument и getdocument
...
Рейтинг: 0 / 0
01.12.2003, 16:50
    #32339730
Teo
Teo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML-парсинг
Модуль, сгенерированный XML Data Binding...
Код: plaintext
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.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
{*****************************************************************************}
{                                                                             }
{                           Delphi XML Data Binding                           }
{                                                                             }
{         Generated on:  20 . 11 . 2003   16 : 34 : 22                                    }
{       Generated from: E:\Program Files\Borland\Delphi6\Projects\XML\ 1 .xml   }
{                                                                             }
{*****************************************************************************}
unit XMLwork;

interface

uses xmldom, XMLDoc, XMLIntf;

type

{ Forward Decls }

  IXMLTrafficReportType = interface;
  IXMLFilterType = interface;
  IXMLFilterTypeList = interface;

{ IXMLTrafficReportType }

  IXMLTrafficReportType = interface(IXMLNode)
    ['{A3561C6F-CB26-4793-B158-29865F5AECE2}']
    { Property Accessors }
    function Get_Filter: IXMLFilterTypeList;
    function Get_LastModified: WideString;
    procedure Set_LastModified(Value: WideString);
    { Methods & Properties }
    property Filter: IXMLFilterTypeList read Get_Filter;
    property LastModified: WideString read Get_LastModified write Set_LastModified;
  end;

{ IXMLFilterType }

  IXMLFilterType = interface(IXMLNode)
    ['{0B34646C-E6A2-4725-A6DA-B57F722ED16F}']
    { Property Accessors }
    function Get_Id: WideString;
    function Get_Name: WideString;
    function Get_Sent: WideString;
    function Get_Recv: WideString;
    procedure Set_Id(Value: WideString);
    procedure Set_Name(Value: WideString);
    procedure Set_Sent(Value: WideString);
    procedure Set_Recv(Value: WideString);
    { Methods & Properties }
    property Id: WideString read Get_Id write Set_Id;
    property Name: WideString read Get_Name write Set_Name;
    property Sent: WideString read Get_Sent write Set_Sent;
    property Recv: WideString read Get_Recv write Set_Recv;
  end;

{ IXMLFilterTypeList }

  IXMLFilterTypeList = interface(IXMLNodeCollection)
    ['{75CDD80F-49C6-496C-B7DA-82AB8AFCEF75}']
    { Methods & Properties }
    function Add: IXMLFilterType;
    function Insert(const Index: Integer): IXMLFilterType;
    function Get_Item(Index: Integer): IXMLFilterType;
    property Items[Index: Integer]: IXMLFilterType read Get_Item; default;
  end;

{ Forward Decls }

  TXMLTrafficReportType = class;
  TXMLFilterType = class;
  TXMLFilterTypeList = class;

{ TXMLTrafficReportType }

  TXMLTrafficReportType = class(TXMLNode, IXMLTrafficReportType)
  private
    FFilter: IXMLFilterTypeList;
  protected
    { IXMLTrafficReportType }
    function Get_Filter: IXMLFilterTypeList;
    function Get_LastModified: WideString;
    procedure Set_LastModified(Value: WideString);
  public
    procedure AfterConstruction; override;
  end;

{ TXMLFilterType }

  TXMLFilterType = class(TXMLNode, IXMLFilterType)
  protected
    { IXMLFilterType }
    function Get_Id: WideString;
    function Get_Name: WideString;
    function Get_Sent: WideString;
    function Get_Recv: WideString;
    procedure Set_Id(Value: WideString);
    procedure Set_Name(Value: WideString);
    procedure Set_Sent(Value: WideString);
    procedure Set_Recv(Value: WideString);
  end;

{ TXMLFilterTypeList }

  TXMLFilterTypeList = class(TXMLNodeCollection, IXMLFilterTypeList)
  protected
    { IXMLFilterTypeList }
    function Add: IXMLFilterType;
    function Insert(const Index: Integer): IXMLFilterType;
    function Get_Item(Index: Integer): IXMLFilterType;
  end;

{ Global Functions }

function GetTrafficReport(Doc: IXMLDocument): IXMLTrafficReportType;
function LoadTrafficReport(const FileName: WideString): IXMLTrafficReportType;
function NewTrafficReport: IXMLTrafficReportType;

implementation

{ Global Functions }

function GetTrafficReport(Doc: IXMLDocument): IXMLTrafficReportType;
begin
  Result := Doc.GetDocBinding('TrafficReport', TXMLTrafficReportType) as IXMLTrafficReportType;
end;
function LoadTrafficReport(const FileName: WideString): IXMLTrafficReportType;
begin
  Result := LoadXMLDocument(FileName).GetDocBinding('TrafficReport', TXMLTrafficReportType) as IXMLTrafficReportType;
end;

function NewTrafficReport: IXMLTrafficReportType;
begin
  Result := NewXMLDocument.GetDocBinding('TrafficReport', TXMLTrafficReportType) as IXMLTrafficReportType;
end;

{ TXMLTrafficReportType }

procedure TXMLTrafficReportType.AfterConstruction;
begin
  RegisterChildNode('Filter', TXMLFilterType);
  FFilter := CreateCollection(TXMLFilterTypeList, IXMLFilterType, 'Filter') as IXMLFilterTypeList;
  inherited;
end;

function TXMLTrafficReportType.Get_Filter: IXMLFilterTypeList;
begin
  Result := FFilter;
end;

function TXMLTrafficReportType.Get_LastModified: WideString;
begin
  Result := ChildNodes['LastModified'].Text;
end;

procedure TXMLTrafficReportType.Set_LastModified(Value: WideString);
begin
  ChildNodes['LastModified'].NodeValue := Value;
end;

{ TXMLFilterType }

function TXMLFilterType.Get_Id: WideString;
begin
  Result := AttributeNodes['Id'].Text;
end;

procedure TXMLFilterType.Set_Id(Value: WideString);
begin
  SetAttribute('Id', Value);
end;

function TXMLFilterType.Get_Name: WideString;
begin
  Result := ChildNodes['Name'].Text;
end;

procedure TXMLFilterType.Set_Name(Value: WideString);
begin
  ChildNodes['Name'].NodeValue := Value;
end;

function TXMLFilterType.Get_Sent: WideString;
begin
  Result := ChildNodes['Sent'].Text;
end;

procedure TXMLFilterType.Set_Sent(Value: WideString);
begin
  ChildNodes['Sent'].NodeValue := Value;
end;

function TXMLFilterType.Get_Recv: WideString;
begin
  Result := ChildNodes['Recv'].Text;
end;

procedure TXMLFilterType.Set_Recv(Value: WideString);
begin
  ChildNodes['Recv'].NodeValue := Value;
end;

{ TXMLFilterTypeList }

function TXMLFilterTypeList.Add: IXMLFilterType;
begin
  Result := AddItem(- 1 ) as IXMLFilterType;
end;

function TXMLFilterTypeList.Insert(const Index: Integer): IXMLFilterType;
begin
  Result := AddItem(Index) as IXMLFilterType;
end;

function TXMLFilterTypeList.Get_Item(Index: Integer): IXMLFilterType;
begin
  Result := List[Index] as IXMLFilterType;
end;

end.


Собственно, парсинг документа...
Код: plaintext
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.
unit XML;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, ValEdit, StdCtrls, XMLWork;

type
  TfmMain = class(TForm)
    btnParse: TButton;
    sgResult: TStringGrid;
    procedure btnParseClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  fmMain: TfmMain;

implementation

uses XMLIntf;

{$R *.dfm}

procedure TfmMain.btnParseClick(Sender: TObject);
var
  Rep: IXMLTrafficReportType;
  i: Integer;
begin
  Rep := LoadTrafficReport('1.xml');
  // отрисовка заголовка грида
  sgResult.Cells[ 0 ,  0 ] := 'Id';
  sgResult.Cells[ 1 ,  0 ] := 'Name';
  sgResult.Cells[ 2 ,  0 ] := 'Sent';
  sgResult.Cells[ 3 ,  0 ] := 'Recv';
  // парсинг XML-документа
  for i:=  0  to Rep.Filter.Count -  1  do
    begin
      sgResult.Cells[ 0 , i+ 1 ] := Rep.Filter.Items[i].Id;
      sgResult.Cells[ 1 , i+ 1 ] := Rep.Filter.Items[i].Name;
      sgResult.Cells[ 2 , i+ 1 ] := Rep.Filter.Items[i].Sent;
      sgResult.Cells[ 3 , i+ 1 ] := Rep.Filter.Items[i].Recv;
    end;
  sgResult.Cells[ 0 , i+ 1 ] := Rep.LastModified;
end;
end.


Надеюсь, что разберешься....
...
Рейтинг: 0 / 0
11.12.2003, 03:07
    #32349966
xyz777
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML-парсинг
спасибо! разобрался! но как изменить значение тэга???

var mdoc:IXMLDocumentType;


mdoc.Bank.Customer.SetAttribute('name', 'dfgdfg');

так не получается!
...
Рейтинг: 0 / 0
11.12.2003, 09:18
    #32350087
Teo
Teo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML-парсинг
Попробуй так:
mdoc.Bank.Customer.Set_Name('Значение');
...
Рейтинг: 0 / 0
12.12.2003, 14:19
    #32351455
xyz777
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML-парсинг
Set_name делаю, но не сохраняется и не ругается ни на что..
как сохранить?
...
Рейтинг: 0 / 0
12.12.2003, 16:18
    #32351531
sv
sv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML-парсинг
mdoc.Bank.Customer.text := 'New Value'

может так?
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / XML-парсинг / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]