Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

XML [XP]


Страницы:   1 2

Nightmare ©   (2007-11-14 15:10:00) 

Здравствуйте, у меня возникли проблемы с XML.

Дело в том, что я использую для поиска параметров тэге, функцию FindNode, но если эта функция не находит нужного параметра
то тут же выдаёт сообщение с ошибкой.

Неподскажет ли кто кто-нибудь, как убрать эти сообщения???

Заранее спасибо за ответы.


Nightmare   (2007-11-14 16:21:00) [1]

Хм... Заработало.

Спасибо.


Reindeer Moss Eater   (2007-11-14 16:13:00) [2]

with TXMLDocument.Create(nil) do
try
 LoadFromFile('c.xml');
 .....
except
 //oops....
end;


Nightmare   (2007-11-14 16:09:00) [3]

Проверял на примере с неверным закрывающим тэгом, на ниже приведённом коде. Неработает.  

var I:Integer; s:string;
begin
if Xml.Create('C.xml')<>nil
then
 if Xml.ChildNodes.Nodes[0].ChildNodes.FindNode('Button')<>nil
 then s:='dsfsdfdgsdg';
showmessage(S);
end;


Reindeer Moss Eater   (2007-11-14 16:06:00) [4]

вызывать метод загрузки и проверять результат лоада


Nightmare   (2007-11-14 16:05:00) [5]

А как быть с тем случаем, когда сам xml файл написан неправильно?


Nightmare   (2007-11-14 15:57:00) [6]

Да это тоже недочёт


Reindeer Moss Eater   (2007-11-14 15:55:00) [7]

For I:=1 to Xml.ChildNodes.Nodes[0].ChildNodes.Count-1 do begin

Узлы индексируются не с единицы


Nightmare   (2007-11-14 15:55:00) [8]

Нет вру, всё работает немного неправильный код выложил в [17]


Reindeer Moss Eater   (2007-11-14 15:53:00) [9]

For I:=1 to Xml.ChildNodes.Nodes[0].ChildNodes.Count-1 do begin

1. Где проверка что есть узел Xml.ChildNodes.Nodes[0] ?


Anatoly Podgoretsky   (2007-11-14 15:52:00) [10]


> Вот что я написал, но глюк остался

Код у тебя безграмотный.
Прочитай хотя бы [16]


Reindeer Moss Eater   (2007-11-14 15:52:00) [11]

У тебя неправильное представление об иерархии читаемого xml документа.


Anatoly Podgoretsky   (2007-11-14 15:51:00) [12]


> FindNode returns the interface for the node if it is in
> the list. If NodeName or ChildNodeType does not specify
> a node in the list, FindNode returns nil (Delphi) or NULL
> (C++).


Nightmare   (2007-11-14 15:46:00) [13]

Вот что я написал, но глюк остался

var I:Integer; s:string;
begin
Xml.Create('c.xml');
For I:=1 to Xml.ChildNodes.Nodes[0].ChildNodes.Count-1 do begin
  if Xml.ChildNodes.Nodes[0].ChildNodes[I].ChildNodes.FindNode('Left')<>nil
  then s:='dsfsdfdgsdg';
end;
showmessage(S);


Andrey   (2007-11-14 15:43:00) [14]

Кстати и Nodes[0] тоже может вернуть nil...


Reindeer Moss Eater   (2007-11-14 15:41:00) [15]

FindNode может вернуть nil если узла нет.
и запрашивать NodeName у нила не стоит.


Nightmare   (2007-11-14 15:36:00) [16]

Ха-Ха


Johnmen   (2007-11-14 15:35:00) [17]


> выдаёт сообщение с ошибкой.


> выдаёт глюк

Может выдает деньги евро?


Nightmare   (2007-11-14 15:29:00) [18]

Вот код который выдаёт глюк если нет Тэга Left В тэге Button(Используется TXMLDocument)

var I:Integer; s:string;
begin
Xml.Create('c.xml');
For I:=1 to Xml.ChildNodes.Nodes[0].ChildNodes.Count-1 do begin
 if Xml.ChildNodes.Nodes[0].ChildNodes[I].NodeName='button'
  then s:=Xml.ChildNodes.Nodes[0].ChildNodes[I].ChildNodes.FindNode('Left').NodeName;
end;
showmessage(S);


Anatoly Podgoretsky   (2007-11-14 15:23:00) [19]

> Nightmare  (14.11.2007 15:15:06)  [6]

> Ну а поконкретней что нибудбь можно сказать

От такого слышу


Reindeer Moss Eater   (2007-11-14 15:21:00) [20]

но если эта функция не находит нужного параметра

то есть :
if <не_нашли> then
<не_надо_ничего_делать_с_ненайденным_нодом>


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо