mirror of
https://gitlab.gnome.org/GNOME/libxslt
synced 2025-07-29 15:41:13 +03:00
doc/tutorial/libxslt_tutorial.c, libxslttutorial.html, libxslttutorial.xml
Sun Jun 10 19:36:31 MDT 2001 John Fleck <jfleck@inkstain.net> * doc/tutorial/libxslt_tutorial.c, libxslttutorial.html, libxslttutorial.xml adding tutorial
This commit is contained in:
committed by
John Fleck
parent
cf61bf60f1
commit
33589bf73c
202
doc/tutorial/libxslttutorial.xml
Normal file
202
doc/tutorial/libxslttutorial.xml
Normal file
@ -0,0 +1,202 @@
|
||||
<?xml version="1.0"?>
|
||||
<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
|
||||
"http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [
|
||||
<!ENTITY CODE SYSTEM "libxslt_tutorial.c">
|
||||
]>
|
||||
<article>
|
||||
<articleinfo>
|
||||
<title>libxslt Tutorial</title>
|
||||
<copyright>
|
||||
<year>2001</year>
|
||||
<holder>John Fleck</holder>
|
||||
</copyright>
|
||||
<legalnotice id="legalnotice">
|
||||
|
||||
<para>Permission is granted to copy, distribute and/or modify this
|
||||
document under the terms of the <citetitle>GNU Free Documentation
|
||||
License</citetitle>, Version 1.1 or any later version
|
||||
published by the Free Software Foundation with no Invariant
|
||||
Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of
|
||||
the license can be found <ulink type="http"
|
||||
url="http://www.gnu.org/copyleft/fdl.html">here</ulink>.</para>
|
||||
|
||||
</legalnotice>
|
||||
<author>
|
||||
<firstname>John</firstname>
|
||||
<surname>Fleck</surname>
|
||||
</author>
|
||||
<releaseinfo>
|
||||
This is verion 0.1 of the libxslt Tutorial
|
||||
</releaseinfo>
|
||||
</articleinfo>
|
||||
<abstract>
|
||||
<para>A tutorial on building a simple application using the
|
||||
<application>libxslt</application> library to perform
|
||||
<acronym>XSLT</acronym> transformations to convert an
|
||||
<acronym>XML</acronym> file into <acronym>HTML</acronym>.</para>
|
||||
</abstract>
|
||||
<sect1 id="introduction">
|
||||
<title>Introduction</title>
|
||||
|
||||
<para>The Extensible Markup Language (<acronym>XML</acronym>) is a World
|
||||
Wide Web Consortium standard for the exchange of structured data in text
|
||||
form. Its popularity stems from its universality. Any computer can
|
||||
read a text file. With the proper tools, any computer can read any other
|
||||
computer's <acronym>XML</acronym> files.
|
||||
</para>
|
||||
|
||||
<para>One of the most imporant of those tools is <acronym>XSLT</acronym>:
|
||||
Extensible Stylesheet Language Transformations. <acronym>XSLT</acronym>
|
||||
is a declarative language that allows you to
|
||||
translate your <acronym>XML</acronym> into arbitrary text output
|
||||
using a stylesheet. <application>libxslt</application> provides the
|
||||
functions to perform the transformation.
|
||||
</para>
|
||||
|
||||
<para><application>libxslt</application> is a free C language library
|
||||
written by Daniel Veillard for the <acronym>GNOME</acronym> project
|
||||
allowing you to write programs that perform <acronym>XSLT</acronym>
|
||||
transformations.
|
||||
|
||||
<note>
|
||||
<para>
|
||||
While <application>libxslt</application> was written
|
||||
under the auspices of the <acronym>GNOME</acronym> project, it does not
|
||||
depend on any <acronym>GNOME</acronym> libraries. None are used in the
|
||||
example in this tutorial.
|
||||
</para>
|
||||
</note>
|
||||
|
||||
</para>
|
||||
|
||||
<para>This tutorial illustrates a simple program that reads an
|
||||
<acronym>XML</acronym> file, applies a stylesheet and saves the resulting
|
||||
output. This is not a program you would want to create
|
||||
yourself. <application>xsltproc</application>, which is included with the
|
||||
<application>libxslt</application> package, does the same thing and is
|
||||
more robust and full-featured. The program written for this tutorial is a
|
||||
stripped-down version of <application>xsltproc</application> designed to
|
||||
illustrate the functionality of <application>libxslt</application>.
|
||||
</para>
|
||||
|
||||
<para>References:
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para><ulink url="http://www.w3.org/XML/">W3C <acronym>XML</acronym> page</ulink></para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para><ulink url="http://www.w3.org/Style/XSL/">W3C
|
||||
<acronym>XSL</acronym> page.</ulink></para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para><ulink url="http://xmlsoft.org/XSLT/">libxslt</ulink></para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
|
||||
</para>
|
||||
</sect1>
|
||||
|
||||
<sect1 id="functions">
|
||||
<title>Primary Functions</title>
|
||||
<para>To transform an <acronym>XML</acronym> file, you must perform three
|
||||
functions:
|
||||
<orderedlist>
|
||||
<listitem>
|
||||
<para>parse the input file</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>parse the stylesheet</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>apply the stylesheet</para>
|
||||
</listitem>
|
||||
</orderedlist>
|
||||
</para>
|
||||
<sect2 id="preparing">
|
||||
<title>Preparing to Parse</title>
|
||||
<para>Before you can begin parsing input files or stylesheets, there are
|
||||
several steps you need to take to set up entity handling. These steps are
|
||||
not unique to <application>libxslt</application>. Any
|
||||
<application>libxml2</application> program that parses
|
||||
<acronym>XML</acronym> files would need to take similar steps.
|
||||
</para>
|
||||
<para>First, you need set up some <application>libxml</application>
|
||||
housekeeping. Pass the integer value <parameter>1</parameter> to the
|
||||
<function>xmlSubstituteEntitiesDefault</function> function, which tells
|
||||
the <application>libxml2</application> parser to substitute entities as
|
||||
it parses your file. (Passing <parameter>0</parameter> causes
|
||||
<application>libxml2</application> to not perform entity substitution.)
|
||||
</para>
|
||||
|
||||
<para>Second, set <varname>xmlLoadExtDtdDefaultValue</varname> equal to
|
||||
<parameter>1</parameter>. This tells <application>libxml</application>
|
||||
to load external entity subsets. If you do not do this and the file your
|
||||
input file includes entities through external subsets, you will get
|
||||
errors.</para>
|
||||
</sect2>
|
||||
<sect2 id="parsethestylesheet">
|
||||
<title>Parse the Stylesheet</title>
|
||||
<para>Parsing the stylesheet takes a single function call, which takes a
|
||||
variable of type <type>xmlChar</type>:
|
||||
<programlisting>
|
||||
<varname>cur</varname> = xsltParseStylesheetFile((const xmlChar *)argv[1]);
|
||||
</programlisting>
|
||||
In this case, I cast the stylesheet file name, passed in as a
|
||||
command line argument, to <emphasis>xmlChar</emphasis>. The return value
|
||||
is of type <emphasis>xsltStylesheetPtr</emphasis>, a struct in memory
|
||||
that contains the stylesheet tree and other information about the
|
||||
stylesheet. It can be manipulated directly, but for this example you
|
||||
will not need to.
|
||||
</para>
|
||||
</sect2>
|
||||
|
||||
<sect2 id="parseinputfile">
|
||||
<title>Parse the Input File</title>
|
||||
<para>Parsing the input file takes a single function call:
|
||||
<programlisting>
|
||||
doc = xmlParseFile(argv[2]);
|
||||
</programlisting>
|
||||
It returns an <emphasis>xmlDocPtr</emphasis>, a struct in memory that
|
||||
contains the document tree. It can be manipulated directly, but for this
|
||||
example you will not need to.
|
||||
</para>
|
||||
</sect2>
|
||||
|
||||
<sect2 id="applyingstylesheet">
|
||||
<title>Applying the Stylesheet</title>
|
||||
<para>Now that you have trees representing the document and the stylesheet
|
||||
in memory, apply the stylesheet to the document. The
|
||||
function that does this is <function>xsltApplyStylesheet</function>:
|
||||
<programlisting>
|
||||
res = xsltApplyStylesheet(cur, doc, NULL);
|
||||
</programlisting>
|
||||
For parameters, the function takes an xsltStylesheetPtr and an
|
||||
xmlDocPtr, the values returned by the previous two functions. The third
|
||||
parameter, NULL in this case, can be used to pass parameters to the
|
||||
stylesheet. It is a NULL-terminated array of name/value pairs of const
|
||||
char's.
|
||||
</para>
|
||||
</sect2>
|
||||
|
||||
<sect2 id="saveresult">
|
||||
<title>Saving the result</title>
|
||||
<para><application>libxslt</application> includes a function to use in
|
||||
saving the resulting output: <function>xsltSaveResultToFile</function>. In
|
||||
this case, we save the results to stdout:
|
||||
|
||||
<programlisting>
|
||||
xsltSaveResultToFile(stdout, res, cur);
|
||||
</programlisting>
|
||||
</para>
|
||||
</sect2>
|
||||
|
||||
</sect1>
|
||||
|
||||
<appendix id="thecode">
|
||||
<title>The Code</title>
|
||||
<para><filename>libxslt_tutorial.c</filename>
|
||||
<programlisting>&CODE;</programlisting>
|
||||
|
||||
</para>
|
||||
</appendix>
|
||||
</article>
|
Reference in New Issue
Block a user