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

Вниз

Microsoft.XMLDOM (version 2.0)   Найти похожие ветки 

 
J_S   (2004-01-24 17:07) [0]

Когда я создаю XML-документ, то хотелось бы иметь возможность ему дать понять о том что у него есть внешнее dtd-определение...
файло то есть...
элемент должен быть такого вида
<! DOCTYPE rules SYSTEM "rules.dtd">

однако, создать я его не могу...ругаецца ...
пыталась создать при помощи createNode таким образом


.....
m_Doc : IXMLDOMDocument ;
m_Root : IXMLDOMElement;
m_Node : IXMLDOMElement;

....
inherited Create;
m_Doc:=CoDOMDocument.Create;
Node :=m_Doc.createNode(NODE_DOCUMENT_TYPE, "...");
- не получилось

рылась в MSDN вчера...
так там вообще сказано что я не могу создать ноду типа document_type - W3С это запрещает...
все его свойства, маломальски относящиеся к этому делу - ReadOnly.....


 
Ломброзо   (2004-01-24 17:11) [1]

Сперва слепить WideString строчку, состоящую из объявления ссылки на DTD и корневого тэга руками, скромить её парсеру, а потом строить документ дальше?


 
J_S   (2004-01-24 17:14) [2]

2 Ломброзо
да именно это и не получаецца:(...


 
Ломброзо   (2004-01-24 17:40) [3]

Давайте попробуем парсер наколоть и загрузить xml из потока.

var pDoc: IXMLDomDocument2;
pStream: IStream;
pOleStream: TOleStream;
HG: HGlobal;
hr: HRESULT;
ss: integer;
m_xml: string;
buff: array[0..1000] of char;
begin
HG := 0;
m_xml := "<!DOCTYPE rules SYSTEM "rules.dtd"><root>aaa</root>";
pDoc := CoDomDocument.Create;
HG := GlobalAlloc(GMEM_FIXED, length(m_xml));
OleCheck(CreateStreamOnHGlobal(HG, true, pStream));
pOleStream := TOleStream.Create(pStream);
pOleStream.Seek(0, 0);
pOleStream.Write(PChar(m_xml)^, length(m_xml));
pDoc.load(pStream);
pOleStream.Seek(0, 0);
if not pDoc.load(pStream) then ShowMessage(pDoc.parseError.reason);
ShowMessage(pDoc.xml);
end;

У меня получилось. Парсер проорал, что он не мойшет обработать rules.dtd, потому что он егой не нашёл. Дык у меня его и нету.
Ес-но, ошибки обработать, мусор убрать, объекты прибить.


 
Ломброзо   (2004-01-24 17:41) [4]

разве что парсер у меня модели 3.0


 
J_S   (2004-01-24 18:50) [5]

IStream - не находит,хоть и подключила Types


 
Ломброзо   (2004-01-24 19:39) [6]

М-дя.. "угадал все буквы, не смог назвать слово"... :-)
ComObj, ActiveX, axctrls


 
J_S   (2004-01-24 19:58) [7]

никакой реакции на проделанный фокус не последовало.


 
J_S   (2004-01-24 20:03) [8]

то есть ощибки никакой нет - но ничего и не грузанулось.
разве что только потерся пролог (инструкция <?xml?>)
в результате после сохранения - совершенно пустой файл.


 
Ломброзо   (2004-01-24 20:31) [9]

Если у Вас ничего не получаицца, почитайте, пожалуйста,
документацию.

procedure TForm1.Button1Click(Sender: TObject);
var pDoc: IXMLDomDocument2;
pStream: IStream;
pOleStream: TOleStream;
HG: HGlobal;
m_xml: string;
begin
HG := 0;
pStream := nil;
pDoc := nil;
m_xml := "<!DOCTYPE rules SYSTEM "rules.dtd"><rules>aaa</rules>";
pDoc := CoDomDocument.Create;
try
try
HG := GlobalAlloc(GMEM_FIXED, length(m_xml));
OleCheck(CreateStreamOnHGlobal(HG, true, pStream));
pOleStream := TOleStream.Create(pStream);
pOleStream.Seek(0, 0);
pOleStream.Write(PChar(m_xml)^, length(m_xml));
pDoc.load(pStream);
pOleStream.Seek(0, 0);
if not pDoc.load(pStream) then raise Exception.Create(pDoc.parseError.reason);
except
on E:Exception do Showmessage(E.Message);
end;
finally
//
end;
end;

rules.dtd
==============================
<!ELEMENT rules (#PCDATA)>

a.xml
==============================
<!DOCTYPE rules SYSTEM "rules.dtd">
<rules>aaa</rules>


 
Ломброзо   (2004-01-24 20:35) [10]

исправьте

if not pDoc.load(pStream) then raise Exception.Create(pDoc.parseError.reason);
pDoc.save("a.xml");

и посмотрите, что в файле a.xml

(D5, msxml3.dll)


 
J_S   (2004-01-25 01:32) [11]

up



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

Форум: "Потрепаться";
Текущий архив: 2004.02.13;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.011 c
7-39101
shurik_
2003-11-24 02:51
2004.02.13
реестр


4-39143
Ascan
2003-12-11 11:46
2004.02.13
Переместить папку


8-38970
Dmitriy O.
2003-10-14 10:24
2004.02.13
Фотошоп не понимает BMP записаный самостоятельно


3-38716
Virus
2004-01-22 10:07
2004.02.13
Ole и база данных paradox


14-39085
kor@l
2004-01-22 19:43
2004.02.13
Message





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