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

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

IXMLNode ошибка доступа при получении ChildNodes [D7, WinXP]


31512 ©   (2005-11-17 12:57:00) 

Здравствуйте.
Есть такой вот XML файл:

<?xml version="1.0" encoding="windows-1251" ?>
<LINKTABLE>
   <LINKS code="PARENT" objtype="MATERIAL_FOLDER" rs="RS1" field="ID_PARENT" />
   <LINKS code="FOLDERS" objtype="MATERIAL_FOLDER" rs="RS2" field="ID_CHILD" />
   <LINKS code="MATERIALS" objtype="MATERIAL" rs="RS3" field="ID_MATERIAL" />
   <LINKS code="_PROPERTIES_" objtype="MATERIAL_FOLDER_PROPERTY" rs="RS4" field="ID_SPROPERTY" >
<SAVE cn="CN1">
 <BEFORESAVE/>
 <INSERT/>
 <UPDATE/>
 <DELETE>DELETE FROM SMATERIALPROP WHERE ID_TMATERIAL={_OID_};</DELETE>
 <AFTERSAVE/>
</SAVE>
   </LINKS>
   <LINKS code="PROVIDERS" objtype="CONTRACTOR" rs="RS5" field="ID_PROVIDER">
<SAVE cn="CN1">
 <BEFORESAVE>
    DELETE FROM LTMATERIAL_CONTRACTOR WHERE ID_TMATERIAL={_OID_};
 </BEFORESAVE>
 <INSERT>
    INSERT INTO LTMATERIAL_CONTRACTOR (ID_TMATERIAL, ID_CONTRACTOR) VALUES ({_OID_}, {_LOID_});
 </INSERT>
 <UPDATE>
   INSERT INTO LTMATERIAL_CONTRACTOR (ID_TMATERIAL, ID_CONTRACTOR) VALUES ({_OID_}, {_LOID_});
 </UPDATE>
 <DELETE/>
 <AFTERSAVE/>
</SAVE>
    </LINKS>
   <LINKS code="PLACES" objtype="STORAGE_PLACE" rs="RS6" field="ID_PLACE"><SAVE cn="CN1"><BEFORESAVE>DELETE FROM LTMATERIAL_SPLACE WHERE ID_TMATERIAL={_OID_};</BEFORESAVE><INSERT>INSERT INTO LTMATERIAL_SPLACE (ID_TMATERIAL, ID_SPLACE) VALUES ({_OID_}, {_LOID_});</INSERT><UPDATE>INSERT INTO LTMATERIAL_SPLACE (ID_TMATERIAL, ID_SPLACE) VALUES ({_OID_}, {_LOID_});</UPDATE><DELETE/><AFTERSAVE/></SAVE></LINKS>
   <LINKS code="UNIT" objtype="UNIT" rs="RS1" field="ID_UNIT" />
   <LINKS code="AUNIT" objtype="UNIT" rs="RS1" field="ID_AUNIT" />
   <LINKS code="CATEGORY" objtype="MATERIAL_FOLDER" rs="RS1" field="IDCATEGORY" />
</LINKTABLE>



Без проблем получаю первый тэг <LINKTABLE>
А вот при попытке спросить у него ChildNodes получаю Access violation


 for i:=0 to LinksNode.ChildNodes.Count - 1 do <-Access violation
   begin
     Node := LinksNode.ChildNodes[i];
     if StringIs(LINK_NODE_NAME, Node.NodeName) then
        Add(Node) else
     if StringIs(INCLUDE_NODE_NAME, Node.NodeName) then
         LoadInclude(Node) else continue;
   end;


Тоже самое без проблем приходит с другиси XML. Полагаю, что какая-то ошибка в самой Delphi. Перепробовал всё. Не могу найти причину возникновения ошибки. Помогите пожалуйста.


Polevi   (2005-11-20 08:03:00) [1]

значит указатель ссылается не туда


31512   (2005-11-19 09:22:00) [2]


> Reindeer Moss Eater ©   (17.11.05 16:03) [2]

Может я чего-то не понимаю, но я проверял: указатель на соответсвующий IXMLNode (LinksNode) не null. К ряду свойств доступ имеется, а вот именно к ChildNodes и ещё к нескольким -Delphi exception. NodeName, например, берётся без проблем, а вот OwnerDocument уже фигушки.


Reindeer Moss Eater   (2005-11-17 16:03:00) [3]

Без проблем получаю первый тэг <LINKTABLE>
А вот при попытке спросить у него ChildNodes получаю Access violation


Это потому, что тебе только кажется, что ты получил <LINKTABLE>
На самом деле ты получил nil
Поэтому и AV


31512   (2005-11-17 13:32:00) [4]

Странно... Перевёл получение первого тэга <LINKTABLE> не от TXMLDocument, а от IXMLDocument и всё работает хорошо.


Наверх

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