SAX Парсинг XML и форматирование XML

Автор:catz
Дата:24.11.2008
Просмотров:6981
Скачиваний:1106
Оценка:, Оценок - 1
Скачать (ZIP-файл; Размер - 24665)

Обсудить в форуме

Описание

1. Парсинг XML через SAX (sax.mac)
1.1. Зарегистрировать через regsvr32.exe библиотеку vbxmlsax.dll перекинув ее в system32.
1.2. Перекинуть test.xml на c:\ или в любое другое место предварительно поменяв путь в макросе
2. Форматирование XML при сохранении (nicexml.mac)

Текст примера

 // Парсинг XML через SAX (sax.mac)
import activexfactory;

var axf = ActiveXFactory();
var rdr, hnd;

axf.createObj(rdr, "VBXMLSAX.CVBSAXXMLReader");
axf.createObj(hnd, "VBXMLSAX.CVBSAXContentHandler");

macro SAXContentHandler_StartDocument()
   println("Document start");
end;

macro SAXContentHandler_EndDocument()
   println("Document End");
end;

macro SAXContentHandler_StartElement (NamespaceUri, LocalName, QName, Attributes, Abort)
   println("   Start of " + LocalName);
end;

macro SAXContentHandler_EndElement (NamespaceUri, LocalName, QName, Abort)
   println("   End of " + LocalName);
end;

macro SAXContentHandler_Characters (Chars, Abort)
   if(chars =="\n")
      return;
   end;
   println("      Data: \"" + Chars + "\"");
end;

RslEvHandler.EvSource("SAXContentHandler") = hnd;

rdr.contentHandler = hnd;
rdr.parseURL ("c:\\test.xml");


// Форматирование XML при сохранении (nicexml.mac)
import activexfactory;

var axf = ActiveXFactory();
var rdr, writer, doc, stream;

axf.createObj(rdr,    "MSXML2.SAXXMLReader");
axf.createObj(writer, "MSXML2.MXXMLWriter");
axf.createObj(stream, "ADODB.Stream");
axf.createObj(doc,    "MSXML2.DOMDocument");

stream.open;
stream.Charset = "ISO-8859-1";

doc.loadXml("<doc><one>test1</one><two>test2</two></doc>");

writer.indent = true;
writer.encoding = "ISO-8859-1";
writer.output = stream;

rdr.contentHandler = writer;
rdr.dtdHandler = writer;
rdr.errorhandler = writer;
rdr.putProperty("http://xml.org/sax/properties/lexical-handler", writer);
rdr.putProperty("http://xml.org/sax/properties/declaration-handler", writer);
rdr.parse(doc);

writer.flush();

stream.saveToFile("c:\\output.xml");
rdr = null;
writer = null;
stream.close();