Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.09.30;
Скачать: [xml.tar.bz2];

Вниз

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

 
DimOk ©   (2007-09-05 11:26) [0]

Добрый день уважаемые мастера. Подскажите пожалуйсто, что я  не так делаю. Есть 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
В чем может быть дело? За ранее всем благодарен.


 
palva ©   (2007-09-05 11:34) [1]

XMLFile.DocumentElement...


 
DimOK ©   (2007-09-05 11:40) [2]


> XMLFile.DocumentElement...

value := XMLFile.DocumentElement.GetAttribute("dateFirst");
Если это так, то такая же ошибка :(


 
Reindeer Moss Eater ©   (2007-09-05 11:50) [3]

А вот это посмотри:
ShowMessage(XMLFile.ChildNodes.First.NodeName);


 
DimOK ©   (2007-09-05 12:00) [4]


> ShowMessage(XMLFile.ChildNodes.First.NodeName);

Тоже самое, но я думаю что дело в том что нет XMLFile.Active := True;
Добавил.... и теперь вообще что то не понятное. Ошибка Access violation at address 00000000 и т.п.......


 
Reindeer Moss Eater ©   (2007-09-05 12:02) [5]

Суть в том, что ты ломишься не к тому узлу, к которому хотел.


 
DimOK ©   (2007-09-05 12:12) [6]


> Суть в том, что ты ломишься не к тому узлу, к которому хотел.

Понятно. Я и  ChildNodes["Data"].GetAttribute("dateFirst"); но все так же....(плохо)


 
Reindeer Moss Eater ©   (2007-09-05 12:14) [7]

Понятно, что будет плохо.
Строишь трехколенный вызов, и абсолютно уверен, что все они возвращают валидные элементы.


 
DimOK ©   (2007-09-05 12:17) [8]


> Строишь трехколенный вызов, и абсолютно уверен, что все
> они возвращают валидные элементы.

Как правильно то...?


 
Reindeer Moss Eater ©   (2007-09-05 12:19) [9]

Проверять надо


 
DimOK ©   (2007-09-05 12:22) [10]


> Проверять надо

XMLFile.DocumentElement возврощаят nil


 
DimOK ©   (2007-09-05 12:24) [11]


> XMLFile.DocumentElement возврощаят nil

И XMLFile.ChildNodes.First тоже nil


 
novill ©   (2007-09-05 12:26) [12]

а у тебя файл точно открывается?
попробуй из него хоть что-то получить. например, сам текст хмл.


 
Reindeer Moss Eater ©   (2007-09-05 12:29) [13]

XMLFile.ChildNodes.First тоже nil

Но тебе же на это по барабану. Ты ничего не проверяешь.


 
Reindeer Moss Eater ©   (2007-09-05 12:31) [14]

И в исходники смотреть - не царское это дело

constructor TXMLDocument.Create(const AFileName: DOMString);
begin
 inherited Create(nil);
 FFileName := AFileName;
end;

И все.
Никаких намеков на загрузку самого документа


 
DimOK ©   (2007-09-05 12:31) [15]


> а у тебя файл точно открывается?
> попробуй из него хоть что-то получить. например, сам текст
> хмл.

В отладчике:
XMLFile := TXMLDocument.Create("C:\Выгрузка.xml");

XMLFile =  ([csInheritable]) - не зная что это значит. А ShowMessage(XMLFile.XML.Text) выдает ошибку RUNTime


 
DimOK ©   (2007-09-05 12:35) [16]


> И в исходники смотреть - не царское это дело

Instantiates a TXMLDocument object.

Delphi syntax:

constructor Create(const AFileName: DOMString); reintroduce; overload;

Это из справки.....


 
Reindeer Moss Eater ©   (2007-09-05 12:36) [17]

Я же тебе показал что делает конструктор.


 
novill ©   (2007-09-05 12:36) [18]

код показывай.


 
Reindeer Moss Eater ©   (2007-09-05 12:38) [19]

Все давно уже показано еще в самом вопросе


 
DimOK ©   (2007-09-05 12:42) [20]


> Я же тебе показал что делает конструктор.

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


 
Lacmus ©   (2007-09-05 12:45) [21]

>DimOK

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


 
DimOK ©   (2007-09-05 12:46) [22]


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

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


 
Reindeer Moss Eater ©   (2007-09-05 12:48) [23]

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


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

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


 
Lacmus ©   (2007-09-05 12:53) [24]

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

Value = "02.05.2007 10:57:40"


 
DimOK ©   (2007-09-05 12:54) [25]


> например:
> Твой 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");


 
DimOK ©   (2007-09-05 12:55) [26]


> Value = "02.05.2007 10:57:40"

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


 
Lacmus ©   (2007-09-05 12:57) [27]



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


> XMLFile.Active := True;

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


 
Reindeer Moss Eater ©   (2007-09-05 13:03) [29]

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


 
novill ©   (2007-09-05 13:19) [30]

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

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


 
Lacmus ©   (2007-09-05 13:42) [31]

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

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


 
DimOK ©   (2007-09-05 14:07) [32]


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

_AddRef method (TXMLNode)


 
Lacmus ©   (2007-09-05 14:20) [33]

Еще вариант



XMLFile: IXMLDocument; { XMLIntf}



 
Reindeer Moss Eater ©   (2007-09-05 14:43) [34]

> После конструктора сделай _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;
....


 
palva ©   (2007-09-05 15:38) [35]

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

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


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

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

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;


 
Reindeer Moss Eater ©   (2007-09-05 16:02) [37]

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


 
DimOK ©   (2007-09-05 17:02) [38]

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


 
DimOK ©   (2007-09-05 17:11) [39]

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

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

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



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

Форум: "Начинающим";
Текущий архив: 2007.09.30;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.061 c
15-1188700763
NEW3
2007-09-02 06:39
2007.09.30
IDA Pro 4 3 Ищу какие-нибудь справочники литературу статьи по ней


2-1188907163
ArtikZ
2007-09-04 15:59
2007.09.30
time


15-1188938127
vasIZmax
2007-09-05 00:35
2007.09.30
ПО в кредит


11-1172321991
thaddy
2007-02-24 15:59
2007.09.30
www.delphifusion.com


15-1188494431
Bad_B
2007-08-30 21:20
2007.09.30
Жаворонки и совы(эксперимент)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский