![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
XML [XP]
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
<не_надо_ничего_делать_с_ненайденным_нодом>