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

Вниз

вопрос про XML   Найти похожие ветки 

 
vegarulez ©   (2008-12-17 14:36) [0]

Добрый день всем мастерам!
Пытаюсь разобраться с XML...
тут с примерчиком столкнулся, чот не работает и не могу понять почему...
http://www.codenet.ru/progr/delphi/stat/Using-XML/
делаю пример procedure TThread1.HeaderCreate(Sender: Tobject);

у меня ошибка выходит вот в этом месте

attr := Doc.createAttribute ( "Id ", " Order");

//заменил Att на attr, т.к. там наверно очепятка

createAttribute на входе принимает 1 параметр, а не 2 - поэтому выдаёт ошибку, если у него остваить 1 параметр, то ошибку вызывает уже следующаяя строка

Node.appendChild(attr);

подскажите как правильно сделать, чтоб примерчик заработал.
а то не могу понять чем, тогда отличается createTextNode от createAttribute. потому как, этот кусочек кода работать не хотит.. убираю его и всё работает. Помогите.


 
Медвежонок Пятачок ©   (2008-12-17 14:55) [1]

В файле MSXML_TLB.pas описаны все интерфейсы, константы и соклассы COM-сервера.

msxml2_tlb


 
vegarulez ©   (2008-12-18 06:51) [2]

да, но какую версию лучше импортировать?
Project -> Import type library -> msxml4.dll -> unit MSXML2_TLB;
4-ую?
а то у меня 2,2.6,3.0,4.0,5.0...

4.0?


 
vegarulez ©   (2008-12-18 06:52) [3]

да... понял 4.0.


 
vegarulez ©   (2008-12-18 06:55) [4]

добавил в проект. прописал в юзес, но ошибка то осталась... :(
как быть?


 
Медвежонок Пятачок ©   (2008-12-18 09:25) [5]

как быть?
продолжать скрывать программный код и текст ошибки.


 
Медвежонок Пятачок ©   (2008-12-18 09:44) [6]

var xdoc : IXMLDOMDocument2; iRoot : IXMLDomNode;
begin
xdoc := CoDomDocument.Create;
xdoc.appendChild(xdoc.createProcessingInstruction("xml","version="1.0" encoding="windows-1251""));
iRoot := xdoc.appendChild(xdoc.createElement("root"));
iRoot.attributes.setNamedItem(xdoc.createAttribute("attr1")).nodeValue := "value";
ShowMessage(xdoc.xml);


 
vegarulez ©   (2008-12-18 09:49) [7]

Ошибка это действие невозможно выполнить для узла типа ATTRIBUTE
происходит на строке  Node.appendChild(attr);
вот код примерчика, который пытаюсь сделать, ссылку на который приводил выше.

procedure TForm1.Button2Click(Sender: TObject);
var
 // объявление сокласса, необходим для создания
 coDoc        : CoDomDocument ;
 // объекта XMLDomDocument
 Doc          : DomDocument ;
 // объявление объектов DOMElement
 r            : IXMLDOMElement;
 Node         : IXMLDOMElement;
 //                     DOMText
 txt          : IXMLDOMText;                
 //                     DOMAttribute
 attr         : IXMLDOMAttribute;
begin

 // создание документа DOM
 Doc:=coDoc.Create;
 // установка синхронного режима обработки
 Doc.Set_async(false);
 // начальная инициация DOM документа
 Doc.LoadXML("<Header/>");
 // получение адреса корневого элемента
 r:=Doc.Get_documentElement;                

 // создание DOMElement (таг <Sender>)
 Node := Doc.createElement ( "Sender");        
 // создание текстового узла "ООО "Тайфун""
 txt := Doc.createTextNode( "ООО "Тайфун"");  
 //  присвоение узлу <Sender> значение
 // текстового узла "ООО "Тайфун""
 Node.appendChild(txt);                        
                                               
 // добавление элемента <Sender> в корень документа как дочернего
 r.appendChild(Node);                          

 // аналогичные операции для тага <From>
 Node := Doc.createElement ( "From");          
 
 txt := Doc.createTextNode( "http://tayfun.ru/xml/default.asp");
 Node.appendChild(txt);
 r.appendChild(Node);

 // аналогичные операции для тага <To>
 Node := Doc.createElement ( "To");            
 txt := Doc.createTextNode( "http://irbis.ru");
 Node.appendChild(txt);
 r.appendChild(Node);

 // создание DOMElement ()
 Node := Doc.createElement ( "TypeDocument");
 // создание узла XMLDOMAttribute
 attr := Doc.createAttribute ( "Id");
 //    <TypeDocument Id="Order"/>
 Node.appendChild(attr);
 r.appendChild(Node);
 Memo1.Text:=r.xml;

end;


 
Медвежонок Пятачок ©   (2008-12-18 09:56) [8]

атрибуты добавляются в список атрибутов методом setnameditem, а не чайлдом к ноду


 
vegarulez ©   (2008-12-22 10:32) [9]

ок.
подскажи как добавить к формируемому документу строку
<?xml version="1.0" encoding="utf-8"?>
чот нигде немогу найти.


 
Медвежонок Пятачок ©   (2008-12-22 10:34) [10]

[6]


 
vegarulez ©   (2008-12-22 10:59) [11]

аха сделал [6]
заменив только
var xdoc : IXMLDOMDocument2
на
var xdoc : IXMLDOMDocument

и в месаге он мне пишет
<?xml version="1.0"?>
<root attr1="value"/>

encoding`а нет в сообщении. Он же по идее должен тоже показываться. или это инструкция не отображается, а используется для отображения. но ведь документ- по сути текст и отображается как текст - значит он должен быть.


 
Медвежонок Пятачок ©   (2008-12-22 11:05) [12]

его там не будет пока тело документа не будет сериализовано.
ибо пока документ в памяти нет никакой разницы что там за кодировка.


 
Медвежонок Пятачок ©   (2008-12-22 11:08) [13]

тем более, что encoding="utf-8" это не кодировка, а транспортное представление. то есть способ записи документа на какой-то носитель.


 
vegarulez ©   (2008-12-22 11:17) [14]

ну по сути мне и нужно сформировать документ и отправить его по HTTP.
Но прежде чем отправить нужно же указать что за кодировка. как это посмотреть...

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


 
Медвежонок Пятачок ©   (2008-12-22 11:19) [15]

сохрани документ в файл или поток. иными словами на какое-нибудь устройство.

если же делать writeln(doc.xml) то инструкции не появится.


 
vegarulez ©   (2008-12-26 10:41) [16]

Ок. А как это всё передать теперь по HTTPS?
Пробую просто как тестовое сообщение методом POST через TidHttp, но походу так передавать XML низя, потому как для авторизации логин пароль в теле сообщения храняться, а не в экстрахедерсах допустим.


 
Медвежонок Пятачок ©   (2008-12-26 10:45) [17]

если по https, то какая разница?
логин и пароль в узлах/атрибутах документа все равно никто не увидит кроме тебя и кроме сервера


 
vegarulez ©   (2008-12-26 10:49) [18]

я опечатался...

Пробую просто как теКстовое сообщение методом POST

т.е. ты имеешь ввиду, его можно так передавать? ну просто как текстовую строку(впринципе там же параметры разбиты <> </>), так же как POST запрос в обычном HTTP


 
Медвежонок Пятачок ©   (2008-12-26 10:54) [19]

а какие сомнения?

заголовок, контент-ленс + контент:

http://www.cbr.ru/scripts/XML_daily.asp


 
vegarulez ©   (2009-01-14 08:03) [20]

спасибо за ссыль. давно искал где бы брать он-лайн эти данные.
ну раз всё также как и в обычном POST, то сомнения все развеяны - буду поробовать.
У меня сечас ругань идёт на SSL... не могу понять в чём дело.


 
vegarulez ©   (2009-01-16 14:52) [21]

Подскажи в чём может быть дело, и как проверить реальную ошибку?
У меня вылазиет ошибка Error connecting with SSL  код ошибки 0.
параметры Ssl у меня такие

MaxLineAction: maException
MaxLineLength: 16384
RecvBufferSize: 32768
SendBufferSize: 32768

TIdSSLOptions.Method: sslvSSLv23
TIdSSLOptions.Mode: sslmUnassigned

Какие параметры сервера мне нужно знать о правильном формировании параметров клиента?


 
Медвежонок Пятачок ©   (2009-01-16 14:59) [22]

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



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

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

Наверх




Память: 0.51 MB
Время: 0.007 c
2-1232352540
ывывыв
2009-01-19 11:09
2009.03.01
Убрать мерцание при перерисовке формы?


2-1232030193
Handle
2009-01-15 17:36
2009.03.01
GetSysColorBrush


15-1231240044
Илья_
2009-01-06 14:07
2009.03.01
рукописный кириллический шрифт как в школьных учебниках


2-1231929482
TRSteep
2009-01-14 13:38
2009.03.01
XML + TreeView


2-1232433819
KirIL
2009-01-20 09:43
2009.03.01
Как в TDateTimePicker всегда выбирать 1-е число?





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