![]() á×ÔÏÒ Egon Willighagen ï Á×ÔÏÒÅ: ÷ÓÔÕÐÉÌ × ÇÏÌÌÁÎÄÓËÕÀ ËÏÍÁÎÄÕ LF × 1999 Ç. É ÓÔÁÌ ×ÔÏÒÙÍ ÒÅÄÁËÔÏÒÏÍ × ÎÁÞÁÌÅ ÜÔÏÇÏ ÇÏÄÁ. õÞÉÔÓÑ × õÎÉ×ÅÒÓÉÔÅÔÅ îÅÊÍÅÇÅÎÁ ÎÁ ÆÁËÕÌØÔÅÔÅ ÉÎÆÏÒÍÁÃÉÏÎÎÏÊ ÈÉÍÉÉ. éÇÒÁÅÔ × ÂÁÓËÅÔÂÏÌ É ÌÀÂÉÔ ÐÕÔÅÛÅÓÔ×Ï×ÁÔØ. óÏÄÅÒÖÁÎÉÅ: |
òÅÚÀÍÅ:
úÁÍÅÔËÁ ÐÒÅÄÓÔÁ×ÌÑÅÔ ÓÏÂÏÊ ××ÅÄÅÎÉÅ × × ÉÓÐÏÌØÚÏ×ÁÎÉÅ Perl - ÍÏÄÕÌÑ XML::XSLT. òÁÓÓÍÁÔÒÉ×ÁÀÔÓÑ ×ÏÚÍÏÖÎÏÓÔÉ ÓÔÁÎÄÁÒÔÁ XSLT É ÓÐÏÓÏÂÙ ÉÈ ÉÓÐÏÌØÚÏ×ÁÎÉÑ ÄÌÑ ÕÐÒÁ×ÌÅÎÉÑ ÄÏËÕÍÅÎÔÁÍÉ XML.
XSLT ÒÅËÏÍÅÎÄÏ×ÁÎ W3C É ÍÏÖÅÔ ÒÁÓÓÍÁÔÒÉ×ÁÔØÓÑ ËÁË ÓÔÁÎÄÁÒÔ. XSLT Ñ×ÌÑÅÔÓÑ ÞÁÓÔØÀ XSL(ÑÚÙË ÛÁÂÌÏÎÏ× XML). åÇÏ ÎÁÚÎÁÞÅÎÉÅ, ËÁË ÓÌÅÄÕÅÔ ÉÚ ÎÁÚ×ÁÎÉÑ, - ÆÏÒÍÁÔÉÒÏ×ÁÎÉÅ XML-ÄÏËÕÍÅÎÔÁ. æÏÒÍÁÔÉÒÏ×ÁÎÉÅ Ñ×ÌÑÅÔÓÑ ÏÓÎÏ×ÎÏÊ ÚÁÄÁÞÅÊ XSL É × ÜÔÏÍ ÐÒÏÃÅÓÓÅ ÞÁÓÔÏ ÎÅÏÂÈÏÄÉÍÁ ÔÒÁÎÓÆÏÒÍÁÃÉÑ ÄÁÎÎÙÈ, ÞÔÏ É ÏÓÕÝÅÓÔ×ÌÑÅÔ XSLT.
XSLT-ÏÂÒÁÂÏÔÞÉËÉ ÎÁÐÉÓÁÎÙ ÎÁ ÎÅÓËÏÌØËÉÈ ÑÚÙËÁÈ ÐÒÏÇÒÁÍÍÉÒÏ×ÁÎÉÑ : ÎÁ C(XT, ÒÁÚÒÁÂÏÔÁÎ James Clark) É ÎÁ Java(Xalan, ÒÁÚÒÁÂÏÔÁÎ Lotus Inc.). ôÁËÖÅ ÓÕÝÅÓÔ×ÕÀÔ É Perl-ÐÒÏÅËÔÙ : XML::XSLT É XML::Sabotron. ðÅÒ×ÙÊ ÐÏÌÎÏÓÔØÀ ÎÁÐÉÓÁÎ ÎÁ Perl, ×ÔÏÒÏÊ Ñ×ÌÑÅÓÔÓÑ ÉÎÔÅÒÆÅÊÓÏÍ Ë C++ XSLT-ÏÂÒÁÂÏÔÞÉËÕ.
ôÅËÕÝÕÀ ×ÅÒÓÉÀ ÍÏÄÕÌÑ(0.21) ÍÏÖÎÏ ÚÁÇÒÕÚÉÔØ Ó CPAN. úÁÍÅÔËÁ ÏÓÎÏ×Ù×ÁÅÔÓÑ ÎÁ ÄÁÎÎÏÊ ×ÅÒÓÉÉ. Perl-ÍÏÄÕÌØ ÂÙÌ ÒÁÚÒÁÂÏÔÁÎ Geert Josten - ÓÔÕÄÅÎÔÏÍ ÆÁËÕÌØÔÅÔÁ ÈÉÍÉÉ õÎÉ×ÅÒÓÉÔÅÔÁ îÅÊÍÅÇÅÎÁ, ÎÏ × ÎÁÓÔÏÑÝÅÅ ×ÒÅÍÑ × ÒÁÚÒÁÂÏÔËÅ ÕÞÁÓÔ×ÕÀÔ É ÍÎÏÇÉÅ ÄÒÕÇÉÅ. ðÒÉÍÅÎÅÎÉÅ CVS tree ÐÏÚ×ÏÌÑÅÔ ÒÁÓÓÞÉÔÙ×ÁÔØ ÎÁ ÕÓËÏÒÅÎÉÅ ÒÁÚÒÁÂÏÔËÉ ÍÏÄÕÌÑ, ÞÔÏ ÎÅÏÂÈÏÄÉÍÏ W3C ÄÌÑ ÏÓÕÝÅÓÔ×ÌÅÎÉÑ ÒÁÂÏÞÅÇÏ ÐÒÏÅËÔÁ XSLT.
îÉÖÅ ÓÌÅÄÕÅÔ Perl-ËÏÄ, ÄÅÍÏÎÓÔÒÉÒÕÀÝÉÊ ÉÓÐÏÌØÚÏ×ÁÎÉÅ ÍÏÄÕÌÑ :
#!/usr/bin/perl use XML::XSLT; my $xmlfile = "example.xml"; my $xslfile = "example.xsl"; my $parser = XML::XSLT->new ($xslfile, "FILE"); $parser->transform_document ($xmlfile, "FILE"); $parser->print_result();
úÄÅÓØ XML-ÆÁÊÌ(example.xml) ÔÒÁÎÓÆÏÒÍÉÒÕÅÔÓÑ ÎÁ ÏÓÎÏ×Å XSLT-ÆÁÊÌÁ (example.xsl). ôÁËÖÅ ÛÁÂÌÏÎÙ ÍÏÇÕÔ ÂÙÔØ ÏÓÎÏ×ÁÎÙ ÎÁ DOM tree :
#!/usr/bin/perl use XML::XSLT; use XML::DOM; my $domparser = new XML::DOM::Parser; my $doc = $domparser->parsefile ("file.xml"); my $parser = XML::XSLT->new ($doc, "DOM");
ÉÌÉ ÓÔÒÏËÅ :
#!/usr/bin/perl use XML::XSLT; my $xsl_string = qq{ <?xml version="1.0"?> <xsl:stylesheet> <xsl:template match="/"> <html> <xsl:apply-templates/> </body> </xsl:template> </xsl:stylesheet> }; my $parser = XML::XSLT->new ($xsl_string, "STRING");
÷ÓÅ ÔÒÉ ×ÁÒÉÁÎÔÁ ÍÏÖÎÏ ÉÓÐÏÌØÚÏ×ÁÔØ ÄÌÑ ÐÒÏÃÅÄÕÒÙ transform_document(), ÐÏËÁÚÁÎÎÏÊ × ÐÅÒ×ÏÍ ÐÒÉÍÅÒÅ.
óËÒÉÐÔ ÔÒÁÎÓÌÉÒÕÀÝÉÊ XML-ÆÁÊÌ ÎÁ ÏÓÎÏ×Å ÛÁÂÌÏÎÁ XSLT ÍÏÖÎÏ ÚÁÇÒÕÚÉÔØ ÚÄÅÓØ. ïÎ ÉÓÐÏÌØÚÕÅÔ ÉÍÅÎÁ ÆÁÊÌÏ× × ËÁÞÅÓÔ×Å ÁÒÇÕÍÅÎÔÏ× : ÛÁÂÌÏÎ XSLT É XML ÆÁÊÌ. ïÂÒÁÔÉÔÅ ×ÎÉÍÁÎÉÅ, ÞÔÏ ÓËÒÉÐÔ ÉÓÐÏÌØÚÕÅÔ ÍÅÈÁÎÉÚÍ "FILE".
ôÅÐÅÒØ, ÐÏÓÌÅ ÔÏÇÏ ËÁË ÍÙ ÕÚÎÁÌÉ ÓÐÏÓÏ ÐÒÉÍÅÎÅÎÉÑ XSLT-ÏÂÒÁÂÏÔÞÉËÁ ÄÌÑ ÔÒÁÎÓÌÑÃÉÉ XML-ÄÏËÕÍÅÎÔÏ× × ÑÚÙËÅ Perl, ÒÁÓÓÍÏÔÒÉÍ ÓÔÁÎÄÁÒÔ XSLT.
XSLT ÂÙÌ ÒÁÚÒÁÂÏÔÁÎ Ó ÃÅÌØÀ ÕÐÒÏÝÅÎÉÑ ÐÕÂÌÉËÁÃÉÉ ÄÁÎÎÙÈ, ÈÒÁÎÉÍÙÈ × XML. XSL-ÆÏÒÍÁÔÉÒÏ×ÁÎÉÅ ÉÓÐÏÌØÚÕÅÔÓÑ ÄÌÑ ÒÁÚÒÁÂÏÔËÉ É ÐÒÅÄÓÔÁ×ÌÅÎÉÑ, Á XSLT-ÄÌÑ ÔÒÁÎÓÆÏÒÍÁÃÉÉ XML-ÄÁÎÎÙÈ (ÓÏÒÔÉÒÏ×ËÁ, ×ÙÂÏÒ, ËÏÍÂÉÎÉÒÏ×ÁÎÉÅ ÉÚ ÒÁÚÌÉÞÎÙÈ ÉÓÔÏÞÎÉËÏ×). îÁ ÓÁÍÏÍ ÄÅÌÅ, ËÁË ÐÏËÁÚÙ×ÁÅÔ ÐÒÁËÔÉËÁ, XSLT ÄÏÓÔÁÔÏÞÅÎ ÔÁËÖÅ ÄÌÑ ÒÁÚÒÁÂÏÔËÉ É ÐÒÅÄÓÔÁ×ÌÅÎÉÑ.
íÏÄÕÌØ XML::XSLT ÉÓÐÏÌØÚÕÅÔ ÎÅ ×ÓÅ ËÏÍÁÎÄÙ XSLT, ÎÏ ×ÓÅ ÒÁÓÓÍÁÔÒÉ×ÁÅÍÙÅ × ÚÁÍÅÔËÅ ÐÏÄÄÅÒÖÉ×ÁÀÔÓÑ.
XSLT-ÄÏËÕÍÅÎÔ ÏÐÒÅÄÅÌÑÅÔ ÍÅÔÏÄ ÔÒÁÎÓÆÏÒÍÁÃÉÉ XML-ÄÏËÕÍÅÎÔÁ. üÔÏ ÄÏÓÔÉÇÁÅÔÓÑ ÏÐÒÅÄÅÌÅÎÉÅÍ ÛÁÂÌÏÎÁ ÄÌÑ ËÁÖÄÏÇÏ ÜÌÅÍÅÎÔÁ. îÉÖÅ ÒÁÓÓÍÁÔÒÉ×ÁÅÔÓÑ ÎÅÓËÏÌØËÏ ÐÒÉÍÅÒÏ× XSLT-ÄÏËÕÍÅÎÔÏ×, ÐÒÉÍÅÎÑÅÍÙÈ Ë ÏÄÎÏÍÕ XML-ÄÏËÕÍÅÎÔÕ, ÓÏÄÅÒÖÁÝÅÍÕ ÒÁÂÏÞÉÊ ÌÉÓÔ Gnumeric (GNOME).
ðÒÏÓÍÏÔÒÅ× ÛÁÂÌÏÎÙ ÍÏÖÎÏ ÏÂÎÁÒÕÖÉÔØ, ÞÔÏ ÏÎÉ ÓÏÄÅÒÖÁÔ ÉÎÆÏÒÍÁÃÉÀ Ï ÆÏÒÍÁÔÅ ×Ù×ÏÄÉÍÙÈ ÄÁÎÎÙÈ (ÎÁÐÒÉÍÅÒ : ÆÏÒÍÁÔ ÓÔÒÁÎÉÃÙ, ÛÉÒÉÎÁ É ×ÙÓÏÔÁ ÑÞÅÊËÉ). íÙ ÓÏÚÄÁÄÉÍ XSLT-ÛÁÂÌÏÎÙ ÄÌÑ ×ÙÐÏÌÎÅÎÉÑ ÓÌÅÄÕÀÝÉÈ ÚÁÄÁÞ :
÷×ÅÄÅÎÉÅ × ÏÓÎÏ×Ù XML::XSLT ÏÓÕÝÅÓÔ×ÉÍ ÎÁÐÉÓÁÎÉÅÍ XSLT-ÛÁÂÌÏÎÁ ×ÙÄÁÀÝÅÇÏ ËÒÁÔËÉÊ ÏÔÞÅÔ (verysimple.xsl):
<?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="*"> <xsl:apply-templates/> </xsl:template> <xsl:template match="text()"/> <xsl:template match="Item"> <xsl:value-of select="./name"/> : <xsl:value-of select="./val-string"/> </xsl:template> </xsl:stylesheet>
ðÅÒ×ÙÊ ÛÁÂÌÏÎ ÎÁÈÏÄÉÔ ×ÓÅ ÜÌÅÍÅÎÔÙ × XML-ÄÏËÕÍÅÎÔÅ, ×ÔÏÒÏÊ-CDATA × XML- ÄÏËÕÍÅÎÔÅ É ÎÁËÏÎÅà ÔÒÅÔÉÊ ×ÙÐÏÌÎÑÅÔ ÔÏ, ÞÔÏ ÍÙ ÈÏÔÅÌÉ ÓÄÅÌÁÔØ : ËÁÖÄÙÊ ÜÌÅÍÅÎÔ × ÏÔÞÅÔÅ ÓÏÐÒÏ×ÏÖÄÁÅÔÓÑ ÚÎÁÞÅÎÉÅÍ CDATA ÜÌÅÍÅÎÔÏ× name É val-string. ðÏÐÒÏÂÕÊÔÅ ÓÁÍÉ! óÒÁ×ÎÉÔÅ ×Ù×ÏÄÉÍÕÀ ÉÎÆÏÒÍÁÃÉÀ Ó ÔÅÍ, ÞÔÏ ×Ù ÈÏÔÅÌÉ ÐÏÌÕÞÉÔØ.
îÏ ×ÅÄØ ÕÖÅ ÐÅÒ×ÙÊ ÛÁÂÌÏÎ ÎÁÈÏÄÉÔ ÜÌÅÍÅÎÔ, ÎÅ ÔÁË ÌÉ? ôÏÇÄÁ ÐÏÞÅÍÕ ÐÒÉÍÅÎÑÅÔÓÑ ÔÒÅÔÉÊ ÛÁÂÌÏÎ, Á ÎÅ ÐÅÒ×ÙÊ? ÷ÓÅ ÄÅÌÏ × ÔÏÍ, ÞÔÏ ÐÏÓÌÅÄÕÀÝÉÊ ÐÅÒÅÐÉÓÙ×ÁÅÔ ÐÒÅÄÙÄÕÝÉÊ. ðÏÜÔÏÍÕ ÛÁÂÌÏÎÙ ÒÁÓÐÏÌÏÖÅÎÙ ÏÔ ÏÂÝÉÈ Ë ÓÐÅÃÉÆÉÞÎÙÍ.
ïÂÒÁÔÉÔÅ ×ÎÉÍÁÎÉÅ ÎÁ ÄÏÂÁ×ÌÅÎÉÅ ÍÎÏÖÅÓÔ×Á ÐÒÏÂÅÌÏ×. ñ ÎÅ ÄÕÍÁÀ, ÞÔÏ ÅÓÔØ ×ÏÚÍÏÖÎÏÓÔØ ÏÂÏÊÔÉ ÜÔÏ ÄÌÑ ÄÁÎÎÏÊ ×ÅÒÓÉÉ. îÏ ÅÓÌÉ ÆÁÊÌ ÂÕÄÅÔ × ÆÏÒÍÁÔÅ XHTML- ÎÁÍ ÎÅ Ï ÞÅÍ ÂÅÓÐÏËÏÉÔØÓÑ. óÌÅÄÕÀÝÉÊ ÐÒÉÍÅÒ ÓÏÏÔ×ÅÔÓÔ×ÕÅÔ ÐÒÅÄÙÄÕÝÅÍÕ Ó ÄÏÂÁ×ÌÅÎÉÅÍ ÓÌÕÖÅÂÎÏÊ ÉÎÆÏÒÍÁÃÉÉ XHTML ÄÌÑ ÐÒÏÓÍÏÔÒÁ ×ÙÈÏÄÎÏÇÏ ÆÁÊÌÁ × ×Å - ÂÒÁÕÚÅÒÅ (simple.xsl):
<?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="*"> <xsl:apply-templates/> </xsl:template> <xsl:template match="text()"/> <xsl:template match="Item"> <b><xsl:value-of select="./name"/></b>: <i><xsl:value-of select="./val-string"/></i><br /> </xsl:template> <xsl:template match="/"> <html> <head> <title>Summary Gnumeric File</title> </head> <body bgcolor="white"> <xsl:apply-templates/> </body> </html> </xsl:template> </xsl:stylesheet>
äÏÐÏÌÎÉÔÅÌØÎÙÊ ÛÁÂÌÏÎ ÄÌÑ ÜÌÅÍÅÎÔÁ root(/) ÐÏÚ×ÏÌÑÅÔ ×ÓÔÁ×ÉÔØ XHTML-ËÏÄ ÐÅÒÅÄ É ÐÏÓÌÅ ÏÓÎÏ×ÎÏÇÏ ×Ù×ÏÄÁ. òÁÓÓÍÏÔÒÉÍ ÐÏÄÒÏÂÎÅÅ : ÐÒÉ ÚÁÐÕÓËÅ XML::XSLT ÏÓÕÝÅÓÔ×ÌÑÅÔÓÑ ÐÏÉÓË ÛÁÂÌÏÎÁ Ó ÜÌÅÍÅÎÔÏÍ root, ÄÁÌÅÅ ×ÓÔÁ×ÌÑÅÔÓÑ XHTML-ËÏÄ ÄÏ ÏÔËÒÙ×ÁÀÝÅÇÏ ÜÌÅÍÅÎÔÁ <body> ×ËÌÀÞÉÔÅÌØÎÏ, ÐÏÓÌÅ ÜÔÏÇÏ ÐÒÉÍÅÎÑÀÔÓÑ ÛÁÂÌÏÎÙ Ë ÜÌÅÍÅÎÔÁÍ, ÚÁÔÅÍ ÐÒÏÄÏÌÖÁÅÔÓÑ ÏÂÒÁÂÏÔËÁ Ó ÛÁÂÌÏÎÏÍ root É ×ÓÔÁ×ÌÑÅÔÓÑ ÚÁËÒÙ×ÁÀÝÉÊ ÜÌÅÍÅÎÔ </body> É ÄÒ.
÷ ÛÁÂÌÏÎ Item ÄÏÂÁ×ÌÑÅÔÓÑ ÄÏÐÏÌÎÉÔÅÌØÎÙÊ XHTML-ËÏÄ. ïÂÒÁÔÉÔÅ ×ÎÉÍÁÎÉÅ, ÞÔÏ ÍÏÖÎÏ ÉÓÐÏÌØÚÏ×ÁÔØ ÏÄÎÏ×ÒÅÍÅÎÎÏ É XSLT ËÏÍÁÎÄÙ É ×Ù×ÏÄÉÍÙÅ ÄÁÎÎÙÅ. XSLT-ÏÂÒÁÂÏÔÞÉË ÐÒÉÎÉÍÁÅÔ ×ÓÅ ÜÌÅÍÅÎÔÙ ÎÅ ÓÏÄÅÒÖÁÝÉÅ xsl ËÁË ×Ù×ÏÄÉÍÙÅ ÄÁÎÎÙÅ.
ó ÜÔÏÇÏ ÍÅÓÔÁ ÂÕÄÅÍ ÐÏËÁÚÙ×ÁÔØ ÔÏÌØËÏ ÎÏ×ÙÅ ÉÌÉ ÉÚÍÅÎÅÎÎÙÅ ÛÁÂÌÏÎÙ. äÌÑ ÚÁ×ÅÒÛÅÎÉÑ ÎÁÛÅÇÏ ÐÅÒ×ÏÇÏ ÐÒÉÍÅÒÁ ÄÏÂÁ×ÉÍ ÚÁÇÏÌÏ×ÏË É ÐÏÓÍÏÔÒÉÍ ÎÁ ÒÅÚÕÌØÔÁÔÙ ÒÁÂÏÔÙ ËÏÍÁÎÄÙ (finalsimple.xsl):
<xsl:template match="Summary"> <h2>Summary</h2> <ul> <xsl:apply-templates/> </ul> </xsl:template>
ëÏÍÁÎÄÁ xsl:for-each ÐÒÅÄÏÓÔÁ×ÌÑÅÔ ÄÏÐÏÌÎÉÔÅÌØÎÙÅ ×ÏÚÍÏÖÎÏÓÔÉ ÏÂÒÁÂÏÔËÉ XML-ÄÏËÕÍÅÎÔÏ×, ÏÓÏÂÅÎÎÏ × ÓÏÞÅÔÁÎÉÉ Ó ËÏÍÁÎÄÏÊ xsl:sort, ÎÏ ÏÎÁ ÅÝÅ ÎÅ ×ËÌÀÞÅÎÁ × ÍÏÄÕÌØ XML::XSLT.
äÏÂÁ×ÉÍ ÉÎÆÏÒÍÁÃÉÀ Ï ÆÏÒÍÁÔÅ ÓÔÒÁÎÉà Gnumeric Workbook Ó ÐÏÍÏÝØÀ xsl:for-each (foreach.xsl):
<xsl:template match="Sheets"> <xsl:for-each select="Sheet"> <h2><xsl:value-of select="Name"/></h2> <ul> Rows: <xsl:value-of select="MaxRow"/><br /> Cols: <xsl:value-of select="MaxCol"/><br /> </ul> </xsl:for-each> </xsl:template>
ë ÓÏÖÁÌÅÎÉÀ ÉÓÐÏÌØÚÏ×ÁÎÎÙÊ XML-ÄÏËÕÍÅÎÔ ÓÏÓÔÏÉÔ ÉÚ ÏÄÎÏÊ ÓÔÒÁÎÉÃÙ. íÏÖÎÏ ÐÏÐÒÏÂÏ×ÁÔØ ÐÒÉÍÅÎÉÔØ ÜÔÏÔ ÛÁÂÌÏÎ Ë ÄÒÕÇÏÍÕ Gnumeric-ÆÁÊÌÕ, ÓÏÓÔÏÑÝÅÍÕ ÉÚ ÎÅÓËÏÌØËÉÈ ÓÔÒÁÎÉÃ.
ëÁË ÕÐÏÍÉÎÁÌÏÓØ ÒÁÎØÛÅ-ÍÙ ÎÅ ÍÏÖÅÍ ÓÏÒÔÉÒÏ×ÁÔØ ÜÌÅÍÅÎÔÙ Ó ÐÏÍÏÝØÀ XML::XSLT × ÄÁÎÎÙÊ ÍÏÍÅÎÔ. ïÞÅÎØ ÖÁÌØ, ÐÏÔÏÍÕ ÞÔÏ XML-ÄÁÎÎÙÅ × Gnumeric-ÆÁÊÌÅ ÎÅ ÏÔÓÏÒÔÉÒÏ×ÁÎÙ. åÓÌÉ ÂÙ Õ ÎÁÓ ÂÙÌÁ ×ÏÚÍÏÖÎÏÓÔØ ÏÔÓÏÒÔÉÒÏ×ÁÔØ ÉÈ, ÍÙ ÍÏÇÌÉ ÂÙ ÓÏÓÔÁ×ÉÔØ XHTML-ÔÁÂÌÉÃÕ Ó ÔÏÞÎÙÍ ÏÇÌÁ×ÌÅÎÉÅÍ. ÷ÓÅ, ÞÔÏ ÍÙ ÍÏÖÅÍ ÓÅÊÞÁÓ ÓÄÅÌÁÔØ - ÐÏÍÅÓÔÉÔØ ×ÓÀ ÉÎÆÏÒÍÁÃÉÀ × ÏÄÎÕ ËÏÌÏÎËÕ. òÁÓÓÍÏÔÒÉÍ ÜÔÏ × ÓÌÅÄÕÀÝÅÍ ÐÒÉÍÅÒÅ.
÷Ù×ÅÄÅÍ ÉÎÆÏÒÍÁÃÉÀ ÉÚ ÔÒÅÔØÅÊ ËÏÌÏÎËÉ (ÄÁÎÎÙÅ Ï ÚÁÒÐÌÁÔÅ ÓÏÓÔÏÑÔÅÌØÎÙÈ ÓÔÕÄÅÎÔÏ× ÉÚ çÏÌÌÁÎÄÉÉ) Ó ÐÏÍÏÝØÀ ËÏÍÁÎÄÙ xsl:if (if.xsl):
<xsl:template match="Sheets"> <xsl:for-each select="Sheet"> <h2><xsl:value-of select="Name"/></h2> <ul> Rows: <xsl:value-of select="MaxRow"/><br /> Cols: <xsl:value-of select="MaxCol"/><br /> <xsl:apply-templates select="Cells"/><br /> </ul> </xsl:for-each> </xsl:template> <xsl:template match="Cells"> Content of Col 3: <xsl:for-each select="Cell"> <xsl:if test="@Col='3'"> <xsl:value-of select="Content"/><xsl:text>, </xsl:text> </xsl:if> </xsl:for-each> </xsl:template>
ôÁË ËÁË ÓÁÍ ÛÁÂÌÏÎ "Sheets" ÎÅ ÐÒÉÍÅÎÑÅÔ ÎÉËÁËÉÈ ÄÏÐÏÌÎÉÔÅÌØÎÙÈ
ÛÁÂÌÏÎÏ× Ë ÜÌÅÍÅÎÔÕ "Cell" ÎÁÍ ÎÅÏÂÈÏÄÉÍÏ ÕËÁÚÁÔØ ÜÔÏ. éÓÐÏÌØÚÕÑ
ËÏÍÁÎÄÕ xsl:apply-templates
Ó ÁÔÔÒÉÂÕÔÏÍ "Cells" ÍÙ
ÐÒÉÍÅÎÑÅÍ ÛÁÂÌÏÎ Ë ÜÔÏÍÕ ÜÌÅÍÅÎÔÕ.
ûÁÂÌÏÎ "Cells" ÐÒÏÓÍÁÔÒÉ×ÁÅÔ ×ÓÅ ÜÌÅÍÅÎÔÙ "Cell" (ÂÕÄØÔÅ ×ÎÉÍÁÔÅÌØÎÙ É ÐÒÏ×ÅÒØÔÅ ÜÔÏ Ó ÉÓÈÏÄÎÙÍ XML-ÆÁÊÌÏÍ), ÎÏ ×Ù×ÏÄÉÔ ÚÎÁÞÅÎÉÅ ÔÏÌØËÏ ÅÓÌÉ ÁÔÔÒÉÂÕÔ "Col" ÉÍÅÅÔ ÚÎÁÞÅÎÉÅ "3". ïÂÒÁÔÉÔÅ ×ÎÉÍÁÎÉÅ, ÞÔÏ ÎÁÌÉÞÉÅ "@" ÕËÁÚÙ×ÁÅÔ ÎÁ ÁÔÔÒÉÂÕÔ, Á ÏÔÓÕÔÓÔ×ÉÅ - ÎÁ ÜÌÅÍÅÎÔ.
òÁÚÒÁÂÏÔÁÎÎÙÅ ÎÁÍÉ ÛÁÂÌÏÎÙ ÓÔÁÌÉ ÂÏÌÅÅ ÓÌÏÖÎÙÍÉ É ÔÅÐÅÒØ ÎÁÄÏ ËÏÎÔÒÏÌÉÒÏ×ÁÔØ
ÔÅËÕÝÉÊ ÜÌÅÍÅÎÔ. ÷ ÒÁÍËÁÈ ×ÓÅÇÏ ÄÏËÕÍÅÎÔÁ ÜÔÏ ÎÅ×ÏÚÍÏÖÎÏ, ÎÏ ÍÏÖÎÏ ÐÏÐÙÔÁÔØÓÑ
× ÏÔÄÅÌØÎÏÍ ÛÁÂÌÏÎÅ. îÁÐÒÉÍÅÒ, ÏÂÒÁÝÁÑÓØ Ë ÛÁÂÌÏÎÕ "Cells" ÏÂÒÁÂÏÔÞÉË
ÐÒÏ×ÏÄÉÔ ÐÏÉÓË ÜÔÏÇÏ ÜÌÅÍÅÎÔÁ (× ÄÁÎÎÏÍ ÓÌÕÞÁÅ ÜÌÅÍÅÎÔ "Cells").
äÁÌÅÅ select="Cell"
× ËÏÍÁÎÄÅ xsl:for-each
ÐÒÏÉÚ×ÏÄÉÔ
×ÙÂÏÒËÕ ×ÓÅÈ ÜÌÅÍÅÎÔÏ× "Cell", É ÏÄÉÎ ÒÁÚ × ÜÔÏÍ ÃÉËÌÅ ÂÕÄÅÔ
ÏÂÒÁÝÅÎÉÅ Ë ÏÄÎÏÍÕ ÉÚ ÜÌÅÍÅÎÔÏ×. ïÂÒÁÔÉÔÅ ×ÎÉÍÁÎÉÅ, ÞÔÏ test="@Col"
ÏÂÒÁÝÁÅÔÓÑ Ë ÁÔÔÒÉÂÕÔÕ "Cell", Á ÎÅ "Cells". ë ÁÔÔÒÉÂÕÔÕ
"Cells" ÍÏÖÎÏ ÏÂÒÁÔÉÔØÓÑ - select="../@name"
,
ÄÁÖÅ ÅÓÌÉ "Cells" ÎÅ ÉÍÅÅÔ ÁÔÔÒÉÂÕÔÏ×.
ëÏÍÁÎÄÁ xsl:text ËÏÎÔÒÏÌÉÒÕÅÔ ×Ù×ÏÄ ×ÓÅÇÏ ÔÅËÓÔÁ. ðÒÏÂÅÌ × ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔÉ
", "
ÐÒÉÎÉÍÁÅÔÓÑ ËÁË ÎÅ ÏÔÎÏÓÑÝÉÊÓÑ Ë ×Ù×ÏÄÉÍÏÊ
ÉÎÆÏÒÍÁÃÉÉ.
üÔÁ ÚÁÍÅÔËÁ Ñ×ÌÑÅÔÓÑ ÌÉÛØ ××ÅÄÅÎÉÅÍ × ÉÓÐÏÌØÚÏ×ÁÎÉÅ ÍÏÄÕÌÑ XML::XSLT. ÷ÏÚÍÏÖÎÏ Õ ×ÁÓ ×ÏÚÎÉËÎÕÔ ×ÏÐÒÏÓÙ É ÜÔÏ ÈÏÒÏÛÏ. ïÓÔÁ×ÌÑÊÔÅ ÉÈ ÎÁ ËÏÎÔÁËÔÎÏÊ ÓÔÒÁÎÉÃÅ ÉÌÉ ÐÉÛÉÔÅ × ÌÉÓÔ ÒÁÓÓÙÌËÉ ×Å ÓÁÊÔÁ XML::XSLT.
Webpages maintained by the LinuxFocus Editor team
© Egon Willighagen LinuxFocus.org 2000 Click here to report a fault or send a comment to Linuxfocus |
Translation information:
|
2000-07-04, generated by lfparser version 1.5