Главная страница
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.017 c
15-1194876600
Кирей
2007-11-12 17:10
2007.12.09
Подскажите, какой конструктор отчетов самый лучший для Delphi


15-1194605822
boriskb
2007-11-09 13:57
2007.12.09
Это что? Сайт вроде солидный


15-1193175070
Прочее
2007-10-24 01:31
2007.12.09
Как сделать чтобы в OnKeyPress проходило сообщение VK_UP ?


3-1186498316
alex_tonk
2007-08-07 18:51
2007.12.09
DBLookupComboBoxEh


15-1194596998
turbouser
2007-11-09 11:29
2007.12.09
Штрихкод