xmlSource.load('source.xml');
ΠΡΠΈ Π·Π°Π³ΡΡΠ·ΠΊΠ΅ ΡΠ°ΠΉΠ»Π° Π²ΠΏΠΎΠ»Π½Π΅ Π²Π΅ΡΠΎΡΡΠ½Ρ ΠΎΡΠΈΠ±ΠΊΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, XML-Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ ΠΌΠΎΠΆΠ΅Ρ Π½Π΅ ΡΠ²Π»ΡΡΡΡΡ Ρ ΠΎΡΠΎΡΠΎ ΠΎΡΠΎΡΠΌΠ»Π΅Π½Π½ΡΠΌ. ΠΠ»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΡΡΠΏΠ΅ΡΠ½ΠΎ ΡΠΏΡΠ°Π²ΠΈΡΡΡΡ Ρ ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΠΎΠ΄Π° ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΡΠΌΠΈ ΡΠΈΡΡΠ°ΡΠΈΡΠΌΠΈ, ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ try...except ΠΈ ΠΎΡΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ EoleException:
try
xmlStylesheet.load('stylesheet.xsl');
memoStylesheet.Text := xmlStylesheet.xml;
except
on e: EOleException do
memoStylesheet.Text := e.Message;
end;
ΠΠ»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ°ΠΌΠΎΠ³ΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ Π½Π°ΠΌ Π±ΡΠ΄Π΅Ρ Π½ΡΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ transformNode:
try
memoResult.Text := xmlSource.transformNode(xmlStylesheet);
except
on e: EOleException do
memoResult.Text := e.Message;
end;
ΠΠ»Ρ ΡΠ΄ΠΎΠ±ΡΡΠ²Π° ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ°ΠΊΠΆΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΈ Π΄Π»Ρ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄ΡΡΠ³ΠΎΠ΅, Π½ΠΎ ΡΡΠΈ ΡΡΠΎΠ²Π΅ΡΡΠ΅Π½ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΡ ΠΌΡ Π·Π΄Π΅ΡΡ ΡΠ°Π·Π±ΠΈΡΠ°ΡΡ Π½Π΅ Π±ΡΠ΄Π΅ΠΌ. ΠΠ³ΡΠ°Π½ΠΈΡΠΈΠΌΡΡ ΡΠ΅ΠΌ, ΡΡΠΎ ΠΏΡΠΈΠ²Π΅Π΄Π΅ΠΌ Π³Π»Π°Π²Π½ΡΡ ΡΠ°ΡΡΡ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΡΡΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ°.
ΠΠΈΡΡΠΈΠ½Π³ 9.1. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ XSLT-ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ Π² Delphiunit source;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ComCtrls, MSXML2_TLB, comobj;
type
TMain = class(TForm)
{ ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΡΠΎΡΠΌΡ ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΡΠΎΠ±ΡΡΠΈΠΉ }
private
public
end;
var
xmlSource: DOMDocument;
xmlStylesheet: DOMDocument;
Main: TMain;
implementation
{$R *.DFM}
procedure TMain.FormCreate(Sender: Tobject);
begin
xmlSource := CoDOMDocument.Create;
xmlStylesheet := CoDOMDocument.Create;
try
xmlSource.load('source.xml');
memoSource.Text := xmlSource.xml;
except
on e: EOleException do
memoSource.Text := e.Message;
end;
try
xmlStylesheet.load('stylesheet.xsl');
memoStylesheet.Text := xmlStylesheet.xml;
except
on e: EOleException do
memoStylesheet.Text := e.Message;
end;
end;
procedure TMain.pcMainChange(Sender: TObject);
begin
if pcMain.ActivePage = sheetResult then
try
memoResult.Text := xmlSource.transformNode(xmlStylesheet);
except
on e: EOleException do
memoResult.Text := e.Message;
end;
end;
{ ΠΡΠΎΡΠΈΠ΅ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ }
end.
ΠΡΠΎΡΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π½Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΡΠΈΡΡΠ½ΠΊΠ°Ρ (ΡΠΈΡ. 9.4β9.6).
Π ΠΈΡ. 9.4. ΠΡ ΠΎΠ΄ΡΡΠΈΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ
Π ΠΈΡ. 9.5. ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅
Π ΠΈΡ. 9.6. ΠΡΡ ΠΎΠ΄ΡΡΠΈΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ
ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ XSLT-ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠΉ Π² C/C++
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ XSLT Π² ΡΠ·ΡΠΊΠ°Ρ Π‘ ΠΈ Π‘++ ΠΌΡ ΠΏΡΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ Π½Π°Π΄ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΎΠΌ source.xml ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ stylesheet.xsl ΠΈ Π²ΡΠ²ΠΎΠ΄ΠΈΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π² ΡΠ°ΠΉΠ» document.out. ΠΠ° ΡΡΠΎΡ ΡΠ°Π· Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ° ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Xalan-C++, Π° Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΡΠ΅Π΄Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ β Microsoft Visual Π‘++.
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° ΠΏΡΡΠ΅ΠΉ
ΠΠ»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Xalan Π² ΡΠ²ΠΎΠ΅ΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ΅, ΠΏΡΠ΅ΠΆΠ΄Π΅ Π²ΡΠ΅Π³ΠΎ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π²ΠΊΠ»ΡΡΠΈΡΡ Π² ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ ΡΠ°ΠΉΠ»Ρ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ²:
#include "util/PlatformUtils.hpp"
#include "XalanTransformer/XalanTransformer.hpp"
Π€Π°ΠΉΠ» PlatformUtils.hpp ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ Xerces-C++, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² Xalan Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΡΠ΅ΡΠ° XML-Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΎΠ². Π€Π°ΠΉΠ» Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° XalanTransformer.hpp ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ ΠΊΠ»Π°ΡΡΡ XalanTransformer, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ ΠΈ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ Π½Π°ΡΠ΅Π³ΠΎ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°.
ΠΠ°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ Xalan ΠΈ Xerces ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π½Π°ΠΉΠ΄Π΅Π½Ρ Π² ΠΏΠΎΡΡΠ°Π²ΠΊΠ΅ Xalan Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°Ρ xml-xalan\c\src ΠΈ xml-xerces\c\src ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ. ΠΠ»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΠΎΠ½ΠΈ ΠΌΠΎΠ³Π»ΠΈ Π±ΡΡΡ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ, ΡΡΠΈ ΠΏΡΡΠΈ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠ²Π½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΏΡΠΎΠΏΠΈΡΠ°ΡΡ Π² Π½Π°ΡΡΡΠΎΠΉΠΊΠ°Ρ ΡΡΠ΅Π΄Ρ (ΠΌΠ΅Π½Ρ Tools/Options), ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° ΡΠΈΡ. 9.7.
Π ΠΈΡ. 9.7. ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° ΠΏΡΡΠ΅ΠΉ Xalan Π² MSVC
ΠΠ»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΡΠΉ ΠΊΠΎΠ΄ ΠΌΠΎΠ³ Π±ΡΡΡ ΡΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Π°Π½, Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅ ΡΠ°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΡΠΊΠ°Π·Π°Π½Ρ ΠΏΡΡΠΈ ΠΊ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΡΠ½ΡΠΌ ΡΠ°ΠΉΠ»Π°ΠΌ Xalan (ΡΠΈΡ. 9.8).
Π ΠΈΡ. 9.8. ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° ΠΏΡΡΠ΅ΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ° XalanTransformer
Π’Π΅ΠΏΠ΅ΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ ΡΠ°Π·ΠΎΠ±ΡΠ°Π»ΠΈΡΡ ΡΠΎ Π²ΡΡΠΊΠΎΠ³ΠΎ ΡΠΎΠ΄Π° Π½Π°ΡΡΡΠΎΠΉΠΊΠ°ΠΌΠΈ, ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π½ΡΡΡΡΡ ΡΠ°ΠΌΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΎΠΉ. Π’ΠΈΠΏΠΈΡΠ½ΡΠΉ ΡΡΠ΅Π½Π°ΡΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Xalan Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΠΈΠ»Π»ΡΡΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ.
ΠΠΈΡΡΠΈΠ½Π³ 9.2. Π’ΠΈΠΏΠΎΠ²ΠΎΠΉ ΡΡΠ΅Π½Π°ΡΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Xalan// ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ Xerces
XMLPlatformUtils::Initialize();
// ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ ΠΊΠ»Π°ΡΡ XalanTransformer
XalanTransformer::initialize();
// Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ° XalanTransformer
XalanTransformer theXalanTransformer;
...
// ΠΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅
theXalanTransformer.transform( ... );
...
// ΠΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅ΠΌ XalanTransformer
XalanTransformer::terminate();
// ΠΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅ΠΌ Xerces
XMLPlatformUtils::Terminate();
Π ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ ΡΡΠΈΠΌ ΡΡΠ΅Π½Π°ΡΠΈΠ΅ΠΌ Π½Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
#include "StdAfx.h"
#include "util/PlatformUtils.hpp"
#include "XalanTransformer/XalanTransformer.hpp"
#include "strstream"
int main(int argc, const char* argv[]) {
using std::cerr;
// ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ Xerces
XMLPlatformUtils::Initialize();
// ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ ΠΊΠ»Π°ΡΡ XalanTransformer
XalanTransformer::initialize();
// Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ° XalanTransformer
XalanTransformer theXalanTransformer;
// ΠΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅
int theResult = theXalanTransformer.transform("source.xml",
"stylesheet.xsl", "document.out");
// Π ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»Π° ΠΎΡΠΈΠ±ΠΊΠ°, Π²ΡΠ²ΠΎΠ΄ΠΈΠΌ, ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ Π½Π΅ΠΉ
if (theResult != 0) {
cerr << "XalanError: \n" << theXalanTransformer.getLastError();
}
// ΠΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅ΠΌ XalanTransformer
XalanTransformer::terminate();
// ΠΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅ΠΌ Xerces
XMLPlatformUtils::Terminate();
return theResult;
}
ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ XSLT-ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠΉ Π² PHP
ΠΠ°ΡΠΈΠ½Π°Ρ Ρ ΡΠ΅ΡΠ²Π΅ΡΡΡΡ Π²Π΅ΡΡΠΈΠΉ, PHP ΠΏΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π²ΠΌΠ΅ΡΡΠ΅ Ρ XSLT-ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠΌ Sablotron, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΠΊΠ»ΡΡΠ΅Π½ Π² Π ΠΠ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ.
ΠΠ»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Sablotron Π² PHP-ΡΠΊΡΠΈΠΏΡΠ°Ρ , ΡΠ»Π΅Π΄ΡΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ:
1. Π£Π±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ ΡΠ°ΠΉΠ» php_sablot.dll ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠΉ.
2. Π£Π±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ Π² ΡΠ°ΠΉΠ»Π΅ php.ini ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ ΡΡΡΠΎΠΊΠ° extension=php_sablot.dll.
3. Π£Π±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ expat.dll ΠΈ sablot.dll Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅, ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ PATH.
ΠΠ°ΠΌΠ΅ΡΠ°Π½ΠΈΠ΅ΠΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΊΠ°ΡΠ°Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Sablotron Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅ Windows32. ΠΠ° Π΄ΡΡΠ³ΠΈΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°Ρ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠΎΠ²Π°ΡΡ Π ΠΠ Ρ ΡΠ»Π°Π³ΠΎΠΌ --with-sablot. Π ΠΎΡΡΠ°Π»ΡΠ½ΠΎΠΌ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½Π°.
Π’Π΅ΠΏΠ΅ΡΡ, ΠΊΠΎΠ³Π΄Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Sablotron ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½Π°, ΠΌΡ ΡΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΠΏΠΈΡΠ°ΡΡ Π½Π΅Π±ΠΎΠ»ΡΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡ ΡΡΡΠ°Π½ΠΈΡΡ Π³ΠΎΡΡΠ΅Π²ΠΎΠΉ ΠΊΠ½ΠΈΠ³ΠΈ.
Π‘ΡΡΠ°Π½ΠΈΡΠ° Π³ΠΎΡΡΠ΅Π²ΠΎΠΉ ΠΊΠ½ΠΈΠ³ΠΈ
ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΡΡΠΎ ΠΌΡ Ρ ΡΠ°Π½ΠΈΠΌ (ΠΈΠ»ΠΈ ΡΠΊΡΠΏΠΎΡΡΠΈΡΡΠ΅ΠΌ) Π΄Π°Π½Π½ΡΠ΅ Π³ΠΎΡΡΠ΅Π²ΠΎΠΉ ΠΊΠ½ΠΈΠ³ΠΈ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΡΠΎΡΠΌΠ°ΡΠ΅.
ΠΠΈΡΡΠΈΠ½Π³ 9.3. ΠΠ°Π½Π½ΡΠ΅ Π³ΠΎΡΡΠ΅Π²ΠΎΠΉ ΠΊΠ½ΠΈΠ³ΠΈ β ΡΠ°ΠΉΠ» source.xml<page>
<date>18/08/2001</date>
<messages>
<message>
<ID>1</ID>
<POSTED>15/03/45BC</POSTED>
<PERSON>Julius</PERSON>
<EMAIL> [email protected]</EMAIL>
<SUBJECT>:(</SUBJECT>
<MSG>Et tu, Brute...</MSG>
</message>
<message>
<ID>2</ID>
<POSTED>20/07/1969</POSTED>
<PERSON>Neil</PERSON>
<SUBJECT>What did I have to say? Oh, yes...</SUBJECT>
<MSG>One small step for a man; one giant leap for mankind!</MSG>
</message>
</messages>
</page>
ΠΠ»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ Π²ΡΠ²Π΅ΡΡΠΈ ΡΠΎΡΠΌΡ Π³ΠΎΡΡΠ΅Π²ΠΎΠΉ ΠΊΠ½ΠΈΠ³ΠΈ ΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠ΅ΡΡ Π² source.xml, ΠΌΡ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅.
ΠΠΈΡΡΠΈΠ½Π³ 9.4. ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ stylesheet.xsl<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- Π€ΠΎΡΠΌΠ°Ρ Π²ΡΠ²ΠΎΠ΄Π° - html -->
<xsl:output method="html"/>
<!-- Π¨Π°Π±Π»ΠΎΠ½ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΊΠΎΡΠ½Π΅Π²ΠΎΠ³ΠΎ ΡΠ·Π»Π° -->
<xsl:template match="/">
<!-- Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΡΠΎΡΠΌΡ Π³ΠΎΡΡΠ΅Π²ΠΎΠΉ ΠΊΠ½ΠΈΠ³ΠΈ -->
<form method="POST" action="guestbook.xsql">
<table>
<tr>
<td>Name</td>
<td>E-mail</td>
</tr>
<tr>
<td><input class="flat" type="text" name="person"/></td>
<td><input class="flat" type="text" name="email"/></td>