Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.03.01;
Скачать: CL | DM;

Вниз

вопрос про 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;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.015 c
2-1232280624
demon
2009-01-18 15:10
2009.03.01
Поиск и папки с ограничением доступа


15-1230816113
@!!ex
2009-01-01 16:21
2009.03.01
Почему вызывается метод предка??


2-1232104037
девушка
2009-01-16 14:07
2009.03.01
Настройка видимости столбцов запроса на клиенте


15-1230566025
Quart
2008-12-29 18:53
2009.03.01
Просветите студента-дипломника


2-1232317022
dreamse
2009-01-19 01:17
2009.03.01
Смена строки в генераторе отчетов