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

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

TXMLDocument [D7, XP]


Страницы:   1 2

DimOk ©   (2007-09-05 11:26:00) 

Добрый день уважаемые мастера. Подскажите пожалуйсто, что я  не так делаю. Есть XML документ мне нужно получить атрибут первого узла
- <Data dateFirst="02.05.2007 10:57:40" dateLast="02.05.2007 10:57:47" NumMag="131611">
- <doc numdoc="000892" typedoc="В/П" sclad="МZ0211" agentcode="МZ0101" date="02.05.2007" dopcode="082670" codeval="USD" cenaval="1" code_cart="" prim="">
 <table nnum="63230179" kol="1" cena="326,1" cenaout="321,48" />
 </doc>
- <doc numdoc="000654" typedoc="ПРН" sclad="МZ0101" agentcode="00000А" date="02.05.2007" dopcode="" codeval="USD" cenaval="1" code_cart="" prim="">
 <table nnum="61120519" kol="1" cena="289,7067" cenaout="249,87" />

код в Delphi:
procedure load_to_1C_app();
var  XMLFile: TXMLDocument;
    value: Variant;
    node: IXMLNode;
begin
XMLFile := TXMLDocument.Create('C:\Выгрузка.xml');
value := XMLFile.ChildNodes.First.GetAttribute('dateFirst');
......
после выполнения подчеркнутой строчки выдает ошибку:
Abstract Error
В чем может быть дело? За ранее всем благодарен.


DimOK   (2007-09-05 17:13:00) [1]

Хотя и можно без
> XMLFile.Active := True;

если
> XMLFile.LoadFromFile('C:\Выгрузка.xml');


DimOK   (2007-09-05 17:11:00) [2]

var  XMLFile: IXMLDocument;
    value: Variant;
    node: IXMLNode;
begin
XMLFile := TXMLDocument.Create(nil);
XMLFile.LoadFromFile('C:\Выгрузка.xml');
XMLFile.Active := True;

node :=  XMLFile.DocumentElement;
value := node.GetAttribute('dateFirst');
MainForm.Edit1.Text := value;

В таком виде все заработало :)


DimOK   (2007-09-05 17:02:00) [3]

Всем спасибо, разобрался :)


Reindeer Moss Eater   (2007-09-05 16:02:00) [4]

ссылка не выходит за пределы видимости - вот и работает.


Svatlena   (2007-09-05 15:50:00) [5]

А у меня вот так работает

procedure LoadXML(const FileName:String);
var Node,SNode:IXMLNode;
begin
InXML:=TXMLDocument.Create(Form1);
InXML.LoadFromFile(FileName);
Node:=InXML.DocumentElement.ChildNodes[0];
Edit1.Text:=Node.Attributes['dateFirst'];
end;


palva   (2007-09-05 15:38:00) [6]

Во первых, в файле русские буквы. Поэтому нужно указание кодировки.

<?xml version="1.0" encoding="Windows-1251"?>
<Data dateFirst="02.05.2007 10:57:40" dateLast="02.05.2007 10:57:47" NumMag="131611">
  <doc numdoc="000892" typedoc="В/П" sclad="МZ0211" agentcode="МZ0101" date="02.05.2007" dopcode="082670" codeval="USD" cenaval="1" code_cart="" prim="">
     <table nnum="63230179" kol="1" cena="326,1" cenaout="321,48" />
  </doc>
  <doc numdoc="000654" typedoc="ПРН" sclad="МZ0101" agentcode="00000А" date="02.05.2007" dopcode="" codeval="USD" cenaval="1" code_cart="" prim="">
     <table nnum="61120519" kol="1" cena="289,7067" cenaout="249,87" />
  </doc>
</Data>


У меня в Delphi 7 работает такой код:

procedure TForm1.Button1Click(Sender: TObject);
var
 XMLFile: IXMLDocument;
begin
 XMLFile := TXMLDocument.Create('C:\123.xml');
 XMLFile.Active := True;
 Label1.Caption := XMLFile.DocumentElement.GetAttributeNS('dateFirst', '');
end;


Reindeer Moss Eater   (2007-09-05 14:43:00) [7]

> После конструктора сделай _AddRef своему документу.

_AddRef method (TXMLNode)


Экземпляру документасделай _AddRef

When TXMLDocument is created without an Owner, it behaves like an interfaced object.That is, when all references to its interface are released, the TXMLDocument instance is automatically freed.

А посему, раз не умеешь обращаться с интерфесными ссылками, то просто :

var x: IXMLDocument;
begin
x := TXMLDocument.Create(nil);
x._AddRef;
....


Lacmus   (2007-09-05 14:20:00) [8]

Еще вариант



XMLFile: IXMLDocument; { XMLIntf}


DimOK   (2007-09-05 14:07:00) [9]


> После конструктора сделай _AddRef своему документу.

_AddRef method ( TXMLNode)


Lacmus   (2007-09-05 13:42:00) [10]

>DimOK ©   (05.09.07 13:01) [28]

В Delphi 2007 все нормально, в Delphi 7 поможет Reindeer Moss Eater ©   (05.09.07 13:03) [29]


novill   (2007-09-05 13:19:00) [11]

> [28] DimOK ©   (05.09.07 13:01)
>
> > XMLFile.Active := True;
>
> На этой строке у меня прекращается выполнение программы...

значит у тебя проблема с самим документом.


Reindeer Moss Eater   (2007-09-05 13:03:00) [12]

После конструктора сделай _AddRef своему документу.


DimOK   (2007-09-05 13:01:00) [13]


> XMLFile.Active := True;

На этой строке у меня прекращается выполнение программы...


Lacmus   (2007-09-05 12:57:00) [14]



<Data dateFirst="02.05.2007 10:57:40" dateLast="02.05.2007 10:57:47" NumMag="131611"/>

procedure TForm50.Button1Click(Sender: TObject);
var  XMLFile: TXMLDocument;
   value: Variant;
begin
 XMLFile := TXMLDocument.Create('C:\123.xml');
 XMLFile.Active := True;
 value := XMLFile.ChildNodes.First.GetAttribute('dateFirst');
end;


DimOK   (2007-09-05 12:55:00) [15]


> Value = '02.05.2007 10:57:40'

Ну да. А как это получилось?...... :)


DimOK   (2007-09-05 12:54:00) [16]


> например:
> Твой XMLFile созданный таким контсруктором - чисто интерфейсная
> ссылка.
> Вышла из области видимости и умерла.

Создан вот так:
XMLFile := TXMLDocument.Create(nil);
XMLFile.NodeIndentStr := '<2 spaces>';
XMLFile.Active:=True;

DocumNode := XMLFile.AddChild('Data');
DocumNode.SetAttribute('dateFirst',Mainform.FirstData.DateTime);
DocumNode.SetAttribute('dateLast',Mainform.LastData.DateTime);
DocumNode.SetAttribute('NumMag',Trim(frmSettingsFilesAndDB.NumMag.Text));
.........
XMLFile.SaveToFile(frmSettingsFilesAndDB.PathToReport.Text + '\Выгрузка.xml');


Lacmus   (2007-09-05 12:53:00) [17]

>DimOK ©   (05.09.07 12:46) [22]

Value = '02.05.2007 10:57:40'


Reindeer Moss Eater   (2007-09-05 12:48:00) [18]

XMLFile := TXMLDocument.Create('C:\Выгрузка.xml');
XMLFile.LoadFromFile('C:\Выгрузка.xml'); // Вылетает ошибка RUNTime опять.


Неправда. Либо код не такой, либо ошибка не здесь.

например:
Твой XMLFile созданный таким контсруктором - чисто интерфейсная ссылка.
Вышла из области видимости и умерла.
А ты продолжаешь  использовать её


DimOK   (2007-09-05 12:46:00) [19]


> Осталось опубликовать полный текст XML-документа

Текст приведен в вопросе (его часть) закрой тэг Data вот и полный текст :)


Lacmus   (2007-09-05 12:45:00) [20]

>DimOK

Осталось опубликовать полный текст XML-документа


Страницы:   1 2

Наверх

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