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

Delphi Sources



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

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

Доброе время суток! У меня появилась небольшая проблема при работе с 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;
__________________
If you want to fuck for funny -
fuck yourself and save your money!
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter