Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.03.2010, 11:05   #1
beemoto
Форумчанин
 
Аватар для beemoto
 
Регистрация: 11.04.2009
Сообщений: 277
Восклицание чтение XML

Помогите плз, уже с ума схожу...
Надо прочитать содержимое тега in_database в данном случае должен вернуть true, если такого тега нет то вернуть должен false(функция булева типа).
использовать pos и тд нежелательно(стандртные компоненты для работы с XML желательно)
вот сам XML:
Код:
<?xml version="1.0" encoding="utf-8"?>
	<response>
		<meta>
			<timestamp>2010-03-21T10:34:35+00:00</timestamp>
			<serverid>ebb667fe</serverid>
			<requestid>192.168.0.105.4ba5f63b8e49c7.34267757</requestid>
		</meta>
		<results>
			<url0>
				<url><![CDATA[http://www.cheapukadds.co.uk/images/SARS/Nedbank/index.html]]></url>
				<in_database>true</in_database>
				<phish_id>948253</phish_id>
				<phish_detail_page><![CDATA[http://www.phishtank.com/phish_detail.php?phish_id=948253]]></phish_detail_page>
				<verified>true</verified>
				<verified_at>2010-03-20T10:35:52+00:00</verified_at>
				<valid>true</valid>
			</url0>
		</results>
	</response>
beemoto вне форума Ответить с цитированием
Старый 22.03.2010, 11:27   #2
quit
Я есть!
Форумчанин
 
Аватар для quit
 
Регистрация: 17.02.2008
Сообщений: 318
По умолчанию

Поиском пользоваться пробовали? Темы снизу смотрите...
©Учиться, учиться и еще раз учиться!
quit вне форума Ответить с цитированием
Старый 22.03.2010, 12:25   #3
beemoto
Форумчанин
 
Аватар для beemoto
 
Регистрация: 11.04.2009
Сообщений: 277
По умолчанию

Голова болит, помогите кодом на мой xml, я помогу плюсом...

смотрел похожие темы, всеравно ничё непонял...

Последний раз редактировалось Stilet; 30.03.2010 в 09:37.
beemoto вне форума Ответить с цитированием
Старый 25.03.2010, 14:21   #4
ArtInt
Форумчанин
 
Аватар для ArtInt
 
Регистрация: 06.03.2009
Сообщений: 583
По умолчанию

Может проще все таки написать специальные функции для обработки файла. Вот например(не помню точно у какого автора брал пример):
Функция для выяснения тегов:
Код:
function TForm1.IsTag(sLine,sTagName: string; var sTagValue: string): boolean;
begin
  if AnsiUpperCase(Copy(sLine,1,Length(sTagName)+2)) = '<'+sTagName+'>' then
  begin
    Delete(sLine,1,Length(sTagName)+2);
    if Copy(sLine,Length(sLine)-(Length(sTagName)+2),Length(sTagName)+3)='</'+sTagName+'>' then
      Delete(sline, Length(sLine)-(Length(sTagName)+2),Length(sTagName)+3);
      sTagValue:=sLine;
      Result:=True
  end
  else
    Result:=False;
end;{IsTag}
Функция для чтения строки:
Код:
//чтение строк в файле
function TForm1.Readline(var MIEof: boolean): string;
var
  s:  string;
begin
  Readln(filefor,s);
  MIEof:=eof(filefor) and (FilePos(filefor)=FileSize(filefor));
  Result:=Trim(s);
end;{Readline}
В основном коде пишем какие теги нам надо найти:
Код:
 
 bFileend:=eof(filefor);

  try
    while not bFileend do
    begin
      s:=ReadLine(bFileEnd);

      if Uppercase(s)='<DOCUMENT>' then
      begin
        repeat
          if not bFileend then
            s:= ReadLine(bFileEnd);
          if (IsTag(s,'CHCAPTION',tagvalue)) then
          begin
            ChCaption.Checked:=strtobool(tagvalue);
            Continue;
          end;
          if (IsTag(s,'ECAPTION',tagvalue)) then
          begin
            Ecaption.Text:=tagvalue;
            Continue;
          end;
          if (IsTag(s,'CBUSLCAPTION',tagvalue)) then
          begin
            CbUslCaption.ItemIndex:=strtoint(tagvalue);
            Continue;
          end;
{пишем другие теги}
        until (bFileend) or (uppercase(s)='</DOCUMENT>');
      end;
    end;
  finally
    CloseFile(filefor);
  end;
Как видно из кода FileFor : textFile.
Например, ECAPTION - это тег, а tagvalue - его значение.
В коде использовались значения для частного случая, но думая смысл понятен, во всяком случае у меня работает.
Не стыдно чего-то не знать, стыдно не стремиться к знаниям.
ArtInt вне форума Ответить с цитированием
Старый 27.03.2010, 10:38   #5
beemoto
Форумчанин
 
Аватар для beemoto
 
Регистрация: 11.04.2009
Сообщений: 277
По умолчанию

не пойдет, мне нужен пример с работой стандартного компонента:
загрузил-прочитал.
например функция- ввожу имя тега - он возвращает содержимое в моем случае ввожу in_database - он возвращает true
beemoto вне форума Ответить с цитированием
Старый 27.03.2010, 23:57   #6
SolovejK
Пользователь
 
Регистрация: 27.01.2010
Сообщений: 52
По умолчанию

Вот тебе с помощью стандартного компонента:
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
  XMLDocument1.Active := true;
  XMLDocument1.LoadFromFile(ExtractFilePath(Application.ExeName) + '1.xml');
  Edit1.Text := VarToStr(XMLDocument1.DocumentElement.ChildNodes['results'].ChildNodes[0].ChildNodes['in_database'].text);
  XMLDocument1.Active := false;
end;
1.xml - это твой xml файл, который находится в папке с программой

Если кроме in_database нужно еще что-то, то добавляешь по аналогии:

Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
  XMLDocument1.Active := true;
  XMLDocument1.LoadFromFile(ExtractFilePath(Application.ExeName) + '1.xml');
  Edit1.Text := VarToStr(XMLDocument1.DocumentElement.ChildNodes[1].ChildNodes[0].ChildNodes['in_database'].text);
  Edit2.Text := VarToStr(XMLDocument1.DocumentElement.ChildNodes[1].ChildNodes[0].ChildNodes['phish_id'].text);
  Edit3.Text := VarToStr(XMLDocument1.DocumentElement.ChildNodes[1].ChildNodes[0].ChildNodes['valid'].text);
  XMLDocument1.Active := false;
end;
SolovejK вне форума Ответить с цитированием
Старый 28.03.2010, 22:09   #7
beemoto
Форумчанин
 
Аватар для beemoto
 
Регистрация: 11.04.2009
Сообщений: 277
По умолчанию

БОООООООООЛЬШОЕ СПАСИБО!
+ в репу!
Если несложно, объясните пожалуйста почему здесь ставится ноль:ChildNodes[0]

Последний раз редактировалось beemoto; 29.03.2010 в 10:37.
beemoto вне форума Ответить с цитированием
Старый 30.03.2010, 09:40   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
почему здесь ставится ноль:ChildNodes[0]
Ну может потому что первый элемент с нуля начинается.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 31.03.2010, 00:26   #9
SolovejK
Пользователь
 
Регистрация: 27.01.2010
Сообщений: 52
По умолчанию

Цитата:
Сообщение от beemoto Посмотреть сообщение
Если несложно, объясните пожалуйста почему здесь ставится ноль:ChildNodes[0]
Я специально в 2-х примерах по разному написал чтобы было видно, что можно двумя способами добраться до этих элементов:
1. по названию
2. по индексу (отсчет начинается с нуля)

В твоем случае можно было также написать: ChildNodes[url0]
SolovejK вне форума Ответить с цитированием
Старый 03.04.2010, 17:12   #10
beemoto
Форумчанин
 
Аватар для beemoto
 
Регистрация: 11.04.2009
Сообщений: 277
По умолчанию

SolovejK, спасибо, всё понял еще + в репутацию =)
beemoto вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чтение и запись параметров в xml BioHEX Общие вопросы Delphi 2 15.01.2010 04:16
парсер XML, не видит XML тэги supercelt PHP 3 02.11.2009 19:18
чтение простейшего XML TaTT DoGG PHP 4 27.08.2009 11:44
Чтение, чтение и еще раз чтение Alex Cones Общие вопросы Delphi 3 07.06.2009 15:28
Чтение XML с помощью XPath Neymexa Общие вопросы .NET 0 14.04.2009 22:43