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

Вниз

Ни че я с этим XML не пойму. Почему документ становится не активн   Найти похожие ветки 

 
Kolan ©   (2007-01-11 18:35) [0]

ым.

Так создаю документ:
constructor TMessageXMLBuilder.Create;
begin
 FXMLDocument := TXMLDocument.Create(nil);
 FXMLDocument.DOMVendor := GetDOMVendor("MSXML");
end;


Заполняю:
procedure TMessageXMLBuilder.BuildXMLDocument(Msg: string);
begin
 FXMLDocument.XML.Clear;
 FXMLDocument.XML.Text := PrepareMessage(Msg);
 FXMLDocument.Active := True;
 FXMLDocument.SaveToFile("C:\C.xml");
end;


Это вызов.

var
 XML: TXMLDocument;
begin
 TMessageXMLBuilder.GetInstance.BuildXMLDocument(mText.Text);
 XML := TMessageXMLBuilder.GetInstance.XMLDocument;
 TMessgeValidator.GetInstance.Validate(XML);
end;


Заполнив документ. Я его передаю на обработку. Вот

procedure TMessgeValidator.Typograf(Msg: TXMLDocument);
var
 TempNode: IXMLNode;
 I: Integer;
begin
 Msg.Active := True;
 if Assigned(Msg.DocumentElement.ChildNodes)  then
 begin
   for I := 0 to Msg.DocumentElement.ChildNodes.Count - 1 do
   begin
     TempNode := Msg.ChildNodes.Nodes[I];
     if not AnsiSameText(AnsiUpperCase(TempNode.NodeName), "SomeNode") then
       DoSmth(TempNode.Text)
   end;
 end;


Я тут по разному изврашался, но после Msg.Active := True; Active = False. Так что дальнейшие изврашения невыполняются вообще.

Что нетак?
Вообще в итоге я хочу обойти все дерево и добраться до текста всех нодов <> "SomeNode".

ЗЫ
 Где прочитать про работу с XML в Delphi. Справку читал. Там хороший пример с компонентом. Как в Run-time"е работать ненашел...


 
Плохиш ©   (2007-01-11 19:00) [1]


>  Msg.Active := True;

Выкинуть нафик.


 
Kolan ©   (2007-01-11 19:03) [2]

Выкинул

Тут же. На строке:
if Assigned(Msg.DocumentElement.ChildNodes)  then

Грит что No Active document.
А в BuildXMLDocument все прошло нормально и файл сохранился.


 
Плохиш ©   (2007-01-11 19:10) [3]

Значит в Typograf передаётся не тот XMLDocument.


 
Kolan ©   (2007-01-11 19:13) [4]

Как не тот?


TMessageXMLBuilder.GetInstance.BuildXMLDocument(mText.Text);
XML := TMessageXMLBuilder.GetInstance.XMLDocument;
TMessgeValidator.GetInstance.Validate(XML);


procedure TMessgeValidator.Validate(Msg: TXMLDocument);
begin
 Typograf(Msg);
end;


 
Kolan ©   (2007-01-11 19:16) [5]

Ставлю сюда точку.
TMessgeValidator.GetInstance.Validate(XML);
Смотрю:
XML.XML.Text
Все ок.

Ставлю сюда:
Typograf(Msg);
Смотрю:
Msg.XML.Text
Грит что illigal in evaluator


 
Kolan ©   (2007-01-11 19:26) [6]

Изменил:
procedure TMessgeValidator.Validate(Msg: TXMLDocument);

на
procedure TMessgeValidator.Validate(Msg: IXMLDocument);

Заработало. Так как же работать? Только через интерфейс? В чем ошибка?


 
Kolan ©   (2007-01-11 20:32) [7]

Ище до кучи вопрос:
Если я в
TempNode.Text добавлю например &laquo;, от он &(анперсанд) заменит на&amp;. В итоге кавычка не получится. Как отучить его от этого?


 
Kolan ©   (2007-01-11 20:33) [8]

имелось в виду
« - laquo;
& - amp


 
Kolan ©   (2007-01-11 22:13) [9]

Вот почему я мучался:
var
Doc: TXMLDocument;
begin
Doc := TXMLDocument.Create(nil);
end;
The important thing to notice is that you are passing in nil as the owner. What happens then is that TXMLDocument takes on a different behavior; it acts as a reference counted object that automatically frees itself when those references reach zero. This means that the next time you do something to Doc that causes a decrease in the reference count, you run the risk of destroying the object and invalidating your reference. The problem is that so much happens to TXMLDocument behind the scenes, inside of the VCL, that it is hard to say when exactly the reference count is getting modified. The easiest way to get around this is to use an interface pointer instead of a TXMLDocument reference, like so:
var
Doc: IXMLDocument;
begin
Doc := TXMLDocument.Create(nil);
end;


Не верю что никто не знал :(



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

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

Наверх




Память: 0.47 MB
Время: 0.04 c
15-1168502279
Vlad Oshin
2007-01-11 10:57
2007.01.28
для/изза чего пишут mov eax,eax практически в каждой функции


4-1158425859
Антибайт
2006-09-16 20:57
2007.01.28
Выравнивание текста в Edit


15-1167800015
Pas
2007-01-03 07:53
2007.01.28
Как перевести на Паскаль ?


15-1168543477
Kolan
2007-01-11 22:24
2007.01.28
Объясните что такое ECO.


2-1168759824
Garacio
2007-01-14 10:30
2007.01.28
запись в один .ini состояния MainForm и Form2





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский