Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Интернет и сети
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 10.08.2006, 20:52
Аватар для fReeZMan
fReeZMan fReeZMan вне форума
Прохожий
 
Регистрация: 24.04.2006
Сообщения: 3
Репутация: 10
По умолчанию Помогите... Xml...

Доброе время суток! У меня появилась небольшая проблема при работе с XML файлом. Прошу о помощи, вот суть проблемы:
Есть XML-файл(для удобство я упростил его)
Код:
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
<?xml version="1.0" encoding="windows-1251" standalone="yes" ?>
- <EXCHANGE_CURRENCY Version="1.0">
- <LIST_R_DATE>
- <R_DATE>
  <DATE>Thu, 10 Aug 2006 00:00:00 GMT</DATE>
- <LIST_E_CHANNEL>
- <E_CHANNEL Id="9">
  <TITLE>Приорбанк карт.</TITLE>
  <DESCRIPTION>***</DESCRIPTION>
- <LIST_RATE>
- <RATE ISO="xxx" Code="xxx">
  <TITLE>Евро</TITLE>
  <CODE>978</CODE>
  <ISO>EUR</ISO>
  <DATE>Thu, 10 Aug 2006 00:00:00 GMT</DATE>
  <BUY><b>инфа1</b></BUY>
  <SELL><b>инфа2</b></SELL>
  <D_BUY>0.5474</D_BUY>
  <D_SELL>0.5396</D_SELL>
  <QUANTITY>1</QUANTITY>
  </RATE>
- <RATE ISO="xxx" Code="xxx">
  <TITLE>x</TITLE>
  <CODE>x</CODE>
  <ISO>x</ISO>
  <DATE>x</DATE>
  <BUY><b>инфа3</b></BUY>
  <SELL><b>инфа4</b></SELL>
  <D_BUY>0.0000</D_BUY>
  <D_SELL>0.0000</D_SELL>
  <QUANTITY>1</QUANTITY>
  </RATE>
  </LIST_RATE>
  <L_DATE>Thu, 10 Aug 2006 00:00:00 GMT</L_DATE>
  </E_CHANNEL>
  </LIST_E_CHANNEL>
  </R_DATE>
  </LIST_R_DATE>
  </EXCHANGE_CURRENCY>
Вот "упрощеный" код XML. Нужная для извлечения мне инфа отмечена в коде XML как инфа1 инфа2 инфа3 инфа4. Вся проблема в том что для извлечения мне нужной инфы нужно указывать путь по тэгам, т.е что бы получить инфа1 я пользуюсь таким кодом:
Код:
1
GetNodeText(['//EXCHANGE_CURRENCY','//LIST_R_DATE ','//R_DATE','//LIST_E_CHANNEL','//E_CHANNEL','//LIST_RATE','//RATE','//BUY']);
Для получения инфа2 я соотвественно пользуюсь кодом:
Код:
1
GetNodeText(['//EXCHANGE_CURRENCY','//LIST_R_DATE ','//R_DATE','//LIST_E_CHANNEL','//E_CHANNEL','//LIST_RATE','//RATE','//SELL']);
Вроде бы с инфа3 и инфа4 тоже все просто, но нет, весь путь по тэгам совпадает до тэга //RATE, тоесть если я пишу опять туже функцию то он считает инфу с тех тэгов которые идут первые по порядку т.е инфа1 и инфа2.

Надеюсь я понятно обьяснил проблему! Если кто знает, помогите! ! ! ! !
Очень надо!
Вот список функций для оперирования с XML-инфой:
Код:
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
function GetNodeText(Path:array of string):string;
var
  Node: variant;
  i:integer;
begin
  Node:=XML.documentElement;
  for i:=0 to High(Path) do begin
    Node:=Node.SelectSingleNode(Path[i]);
    //if integer(Node)=0 then exit;
  end;
    try
    result:=Node.Text;
    except
    result:='';
    end;
end;
 
function GetNodeItemText(Path:array of string;Item:string):string;
var
  Node: variant;
  i:integer;
begin
  Node:=XML.documentElement;
  for i:=0 to High(Path) do begin
    Node:=Node.SelectSingleNode(Path[i]);
    //if Node=0 then exit;
  end;
    try
    result:=Node.attributes.getNamedItem(Item).text;
    except
    result:='';
    end;
end;
 
function GetNodeItemTextFromID(Path:array of string;ID:integer;Item:string):string;
var
  Node: variant;
  i:integer;
begin
  Node:=XML.documentElement;
  for i:=0 to High(Path) do begin
    Node:=Node.SelectSingleNode(Path[i]);
    //if Node=0 then exit;
  end;
    try
    result:=Node.childNodes.item[ID].attributes.getNamedItem(Item).Text;
    except
    result:='';
    end;
end;
 
function GetNodeItemTextByNameFromID(Path:array of string;NodeName:string;ID:integer;Item:string):string;
var
  Node: variant;
  i:integer;
begin
  Node:=XML.documentElement;
  for i:=0 to High(Path) do begin
    Node:=Node.SelectSingleNode(Path[i]);
    //if Node=0 then exit;
  end;
    try
    result:=Node.SelectNodes(NodeName).item[ID].attributes.getNamedItem(Item).text;
    except
    result:='';
    end;
end;
 
function GetNodeTextFromID(Path:array of string;ID:integer):string;
var
  Node: variant;
  i:integer;
begin
  Node:=XML.documentElement;
  for i:=0 to High(Path) do begin
    Node:=Node.SelectSingleNode(Path[i]);
    //if Node=0 then exit;
  end;
    try
    result:=Node.childNodes.item[ID].Text;
    except
    result:='';
    end;
end;
 
 
function GetNodeTextByNameFromID(Path:array of string;NodeName:string;ID:integer):string;
var
  Node: variant;
  i:integer;
begin
  Node:=XML.documentElement;
  for i:=0 to High(Path) do begin
    Node:=Node.SelectSingleNode(Path[i]);
    //if Node=0 then exit;
  end;
    node:=Node.childNodes.item[ID];
 
    try
    result:=Node.SelectSingleNode(NodeName).text;
    //result:=Node.SelectNodes(NodeName).item[ID].text;
    except
    result:='';
    end;
end;
__________________
If you want to fuck for funny -
fuck yourself and save your money!
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 03:22.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025