Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.12.09;
Скачать: CL | DM;

Вниз

XML   Найти похожие ветки 

 
Nightmare   (2007-11-14 15:10) [0]

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

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

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

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


 
Reindeer Moss Eater ©   (2007-11-14 15:11) [1]

врешь ты все


 
Reindeer Moss Eater ©   (2007-11-14 15:12) [2]

насчет "тут же"


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

Reindeer Moss Eater, уж не знаю как у тебя, а меня всё именно так и происходит.


 
Reindeer Moss Eater ©   (2007-11-14 15:14) [4]

Судьба такая


 
Anatoly Podgoretsky ©   (2007-11-14 15:14) [5]

> Nightmare  (14.11.2007 15:13:03)  [3]

Точно врешь.


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

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


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

конечно можно. скажи.


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

Често не вру


 
Reindeer Moss Eater ©   (2007-11-14 15:16) [9]

значит все же судьба


 
Reindeer Moss Eater ©   (2007-11-14 15:21) [10]

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

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


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

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

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

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


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

Вот код который выдаёт глюк если нет Тэга 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);


 
Johnmen ©   (2007-11-14 15:35) [13]


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


> выдаёт глюк

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


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

Ха-Ха


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

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


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

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


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

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

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);


 
Anatoly Podgoretsky ©   (2007-11-14 15:51) [18]


> 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++).


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

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


 
Anatoly Podgoretsky ©   (2007-11-14 15:52) [20]


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

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


 
Reindeer Moss Eater ©   (2007-11-14 15:53) [21]

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

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


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

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


 
Reindeer Moss Eater ©   (2007-11-14 15:55) [23]

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

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


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

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


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

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


 
Reindeer Moss Eater ©   (2007-11-14 16:06) [26]

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


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

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

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:13) [28]

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


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

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

Спасибо.



Страницы: 1 вся ветка

Текущий архив: 2007.12.09;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.029 c
8-1170734577
avprohorov
2007-02-06 07:02
2007.12.09
как перерисовать только Image


3-1185875301
ChaoX
2007-07-31 13:48
2007.12.09
2 связанные таблицы


15-1194763377
Томс
2007-11-11 09:42
2007.12.09
2-е высшее


11-1179414957
Vladimir Kladov
2007-05-17 19:15
2007.12.09
Версия 2.61


3-1185587116
wsv
2007-07-28 05:45
2007.12.09
Написать запрос