Форум: "Потрепаться";
Текущий архив: 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.009 c