Доброе время суток! У меня появилась небольшая проблема при работе с XML файлом. Прошу о помощи, вот суть проблемы:
Есть XML-файл(для удобство я упростил его)
Код:
<?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>инфа1</BUY>
<SELL>инфа2</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>инфа3</BUY>
<SELL>инфа4</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 я пользуюсь таким кодом:
Код:
GetNodeText(['//EXCHANGE_CURRENCY','//LIST_R_DATE ','//R_DATE','//LIST_E_CHANNEL','//E_CHANNEL','//LIST_RATE','//RATE','//BUY']);
Для получения
инфа2 я соотвественно пользуюсь кодом:
Код:
GetNodeText(['//EXCHANGE_CURRENCY','//LIST_R_DATE ','//R_DATE','//LIST_E_CHANNEL','//E_CHANNEL','//LIST_RATE','//RATE','//SELL']);
Вроде бы с
инфа3 и
инфа4 тоже все просто, но нет, весь путь по тэгам совпадает до тэга
//RATE, тоесть если я пишу опять туже функцию то он считает инфу с тех тэгов которые идут первые по порядку т.е
инфа1 и
инфа2.
Надеюсь я понятно обьяснил проблему! Если кто знает, помогите! ! ! ! !
Очень надо!
Вот список функций для оперирования с XML-инфой:
Код:
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;