![]() |
|
#1
|
|||
|
|||
![]() Как с помощью Copy и Pos парсить html? Не могли бы привести пример?
Немного о задумке: Хочу написать клиент для сайта, который будет проверять и выводить информацию. Программа обращается к PHP скрипту на сервере и получать страницу-ответ (с серверной частью и получением страницы проблем нет). Сначало хотел выдавать ответ в XML разметке, но работать с ним геморойно. Зачем нашел JSON, но в библиотеке для работы с ним на делфи не разобрался ![]() Код:
<count>3</count> <info0title>Заголовок0</info0title> <info0text>Текст0</info0text> <info1title>Заголовок1</info1title> <info1text>Текст1</info1text> <info2title>Заголовок2</info2title> <info2text>Текст2</info2text> |
#2
|
||||
|
||||
![]() в принципе да, copy и pos вполне хватит...где-то у меня еще валялись готовые процедуры для парсинга..найду выложу
Последний раз редактировалось Admin, Сегодня в 10:32. |
#3
|
||||
|
||||
![]() Цитата:
Не твори зла, и жизнь повернется к тебе передом ![]() |
#4
|
|||
|
|||
![]() Код:
s:=copy(s,ansipos('>',s)+1,length(s)); s:=copy(s,0,ansipos('<',s)); |
#5
|
|||
|
|||
![]() Цитата:
aleksnine, не совсем понял код... если надо получить текст между <mytag>Текст, который нужно получить</mytag> то как ее записывать (получается толку от первой строки нет, вторая ее перекроет ![]() |
#6
|
||||
|
||||
![]() Код:
s:='<count>3</count>'; if (pos('<count>',s)<>0)and(pos('</count>',s)<>0 ) then begin g:=inttostr(copy(s,pos('<count>',s),pos('</count>',s)-pos('<count>',s))); end; Чтото наподобе такого. код не проверял делал как говорится на коленке. Не твори зла, и жизнь повернется к тебе передом ![]() |
#7
|
||||
|
||||
![]() Забавная задачка, давно такой небыло. Вот такая забавка получилась:
Код:
TSection = record Name, Value: String; end; TSectionArray = Array of TSection; TCustomParser = class fText: String; fSections: TSectionArray; private procedure SetText(const Value: String); function GetSectionCount: Integer; public property Text: String read fText write SetText; property Count: Integer read GetSectionCount; property Sections: TSectionArray read fSections write fSections; function GetSectionValue(Section: String): String; end; { TCustomParser } function TCustomParser.GetSectionCount: Integer; begin Result := Length(fSections); end; function TCustomParser.GetSectionValue(Section: String): String; Var i: Integer; begin for i := 0 to Length(fSections) - 1 do if fSections[i].Name = Section then begin Result := fSections[i].Value; Break; end; end; procedure TCustomParser.SetText(const Value: String); Var S: String; begin fText := Value; S := Value; SetLength(fSections, 0); while Pos('<', S) > 0 do begin SetLength(fSections, Length(fSections) + 1); Delete(S, 1, Pos('<', S)); fSections[High(fSections)].Name := Copy(S, 1, Pos('>', S) - 1); Delete(S, 1, Pos('>', S)); fSections[High(fSections)].Value := Copy(S, 1, Pos('</', S) - 1); Delete(S, 1, Pos('>', S)); end; end; Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. Последний раз редактировалось Страдалецъ, 27.08.2010 в 00:59. |
#8
|
|||
|
|||
![]() Цитата:
[DCC Error] Unit1.pas(37): E2010 Incompatible types: 'HWND' and 'string' |
#9
|
||||
|
||||
![]() Ругается на типы переменных. У вас какого типа переменные s и g?
И вы пробовали мой вариант? Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#10
|
||||
|
||||
![]() Ticksy попробуй сначала вариант страдальце у него больше опыта.
Не твори зла, и жизнь повернется к тебе передом ![]() |
#11
|
|||
|
|||
![]() Цитата:
Код:
procedure TForm1.FormCreate(Sender: TObject); var s : String; var g : string; begin s:='<count>3</count>'; if (pos('<count>',s)<>0)and(pos('</count>',s)<>0 ) then begin g:=inttostr(copy(s,pos('<count>',s),pos('</count>',s)-pos('<count>',s))); Edit1.Text := g; end; end; Среда: Delphi 2010 Если убрать функцию IntToStr, то в g пишется '<count>3' (без кавычек). |
#12
|
||||
|
||||
![]() щас подредактирую
PHP код:
Не твори зла, и жизнь повернется к тебе передом ![]() Последний раз редактировалось Bars1992, 01.09.2010 в 22:05. |
#13
|
|||
|
|||
![]() Bars1992, спасибо! твой код работает
![]() |