Delphi - XML konvertálása HTML formátumra

XML 7. rész

forráskód letöltése
A cikksorozat előző részében az XML dokumentumhoz készítettünk egy XSL állományt is, amelynek segítségével úgy jeleníthettük meg a dokumentumot, mintha egy WEB-lap lenne. Ennek során az XSL állomány segítségével HTML formátumba alakítottuk az XML dokumentumot, bár ez kívülről nem látszott, mivel új állomány nem jött létre. De mi a helyzet akkor, ha szükségünk van a HTML állományra is. Ebből a cikkből megtudhatjuk, hogy hogyan alakíthatunk át egy XML dokumentumot HTML, vagy akár tetszőleges formátumú állománnyá. Ehhez a példához is szükség lesz az MS XML Type Library-ra, ezért az előző cikkben leírt módon készítsük el azt, ha ezt még nem tettük volna meg.
A megoldása kulcsa most is az XSL állományban van. Példánkban HTML formátumra alakítjuk át a dokumentumot, de ezzel a megoldással akár sima txt, vagy rtf formátumba is konvertálhatnánk. Az XSL állományban újdonság nincs az előzőekhez képest, de most egy kicsit másképpen fogjuk felhasználni azt.

A programban létrehozunk két IXMLDOMDocument típusú objektumot, egyiket magának az XML dokumentumnak (XMLDoc), a másikat az XSL állománynak (XSLDoc):
var
  XMLDoc: IXMLDOMDocument;
  XSLDoc: IXMLDOMDocument;
…
    XMLDoc:=CoDOMDocument.Create;
    XSLDoc:=CoDOMDocument.Create;
A két objektumba betöltjük az előzőleg elkészített állományokat a load metódussal:
    XMLDoc.Load(ExtractFilePath(Application.ExeName)+'test.xml');
    XSLDoc.Load(ExtractFilePath(Application.ExeName)+'test.xsl');
Az átalakítást a transform függvény végzi el. Ennek paramétereként át kell adni az XSL állományt tartalmazó objektumot, ami jelen esetben az XSLDoc. A függvény visszatérési értéke az átalakított dokumentum lesz, ASCII formátumban, amit mi egyből átadunk a Memo4 Text property-jének, és el is mentünk "test-htm" néven.
    Memo4.Text:=XMLDoc.transformNode(XSLDoc);
    Memo4.Lines.SaveToFile(ExtractFilePath(Application.ExeName)+'test.htm');
A Form-on található egy TWebBrowse típusú komponens is, amibe a Navigate eljárással betöltjük az elmentett fájlt. Ez a komponens képes HTML oldalak megjelenítésére, így ugyanazt a képet fogjuk látni, mintha az Internet Explorer-rel nyitottuk volna meg.
    WebBrowser1.Navigate(ExtractFilePath(Application.ExeName)+'test.htm');

XML cikksorozat