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

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.02 c
1-38787
snake1977
2004-02-03 10:36
2004.02.13
Кто работал с PGPSDK отзовитесь!!!


3-38739
New
2004-01-19 15:06
2004.02.13
Insert


1-38849
Janbolat
2004-02-02 14:22
2004.02.13
Export to html


14-39071
gn
2004-01-23 21:14
2004.02.13
Защита информации, или пароноя?


1-38884
MadGhost
2004-02-04 18:34
2004.02.13
как продолжить поиск в тексте функцией AnsiPos