Home Map Index Search News Archives Links About LF
[Top bar]
[Bottom bar]
��� �������� �������� �� ��������� ������: English  Castellano  Deutsch  Francais  Russian  Turkce  

[æÏÔÏ Á×ÔÏÒÁ]
����� Egon Willighagen

�� ������:

������� � ����������� ������� LF � 1999 �. � ���� ������ ���������� � ������ ����� ����. ������ � ������������ ��������� �� ���������� �������������� �����. ������ � ��������� � ����� ��������������.

����������:

������������� Perl - ������ XML::XSLT

[éÌÌÀÓÔÒÁÃÉÑ]

������:

������� ������������ ����� �������� � � ������������� 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-�����������.  

������ XML::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

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>
 

������� for-each

������� 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-������� � ������ �����������. ���, ��� �� ����� ������ ������� - ��������� ��� ���������� � ���� �������. ���������� ��� � ��������� �������.  

������� if

������� ���������� �� ������� ������� (������ � �������� ������������� ��������� �� ���������) � ������� ������� 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:
en -> -- Egon Willighagen
en -> ru Kirill Poukhliakov

2000-07-04, generated by lfparser version 1.5