Форум: "Основная";
Текущий архив: 2005.12.18;
Скачать: [xml.tar.bz2];
ВнизIXMLNode ошибка доступа при получении ChildNodes Найти похожие ветки
← →
31512 © (2005-11-17 12:57) [0]Здравствуйте.
Есть такой вот 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. Перепробовал всё. Не могу найти причину возникновения ошибки. Помогите пожалуйста.
← →
31512 © (2005-11-17 13:32) [1]Странно... Перевёл получение первого тэга <LINKTABLE> не от TXMLDocument, а от IXMLDocument и всё работает хорошо.
← →
Reindeer Moss Eater © (2005-11-17 16:03) [2]Без проблем получаю первый тэг <LINKTABLE>
А вот при попытке спросить у него ChildNodes получаю Access violation
Это потому, что тебе только кажется, что ты получил <LINKTABLE>
На самом деле ты получил nil
Поэтому и AV
← →
31512 © (2005-11-19 09:22) [3]
> Reindeer Moss Eater © (17.11.05 16:03) [2]
Может я чего-то не понимаю, но я проверял: указатель на соответсвующий IXMLNode (LinksNode) не null. К ряду свойств доступ имеется, а вот именно к ChildNodes и ещё к нескольким -Delphi exception. NodeName, например, берётся без проблем, а вот OwnerDocument уже фигушки.
← →
Polevi © (2005-11-20 08:03) [4]значит указатель ссылается не туда
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.12.18;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.015 c