"Fossies" - the Fresh Open Source Software Archive

Member "libxslt-1.1.34/doc/python.html" (30 Oct 2019, 15964 Bytes) of package /linux/www/libxslt-1.1.34.tar.gz:


The requested HTML page contains a <FORM> tag that is unusable on "Fossies" in "automatic" (rendered) mode so that page is shown as HTML source code syntax highlighting (style: standard) with prefixed line numbers. Alternatively you can here view or download the uninterpreted source code file.

    1 <?xml version="1.0" encoding="ISO-8859-1"?>
    2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    3 <html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><style type="text/css">
    4 TD {font-family: Verdana,Arial,Helvetica}
    5 BODY {font-family: Verdana,Arial,Helvetica; margin-top: 2em; margin-left: 0em; margin-right: 0em}
    6 H1 {font-family: Verdana,Arial,Helvetica}
    7 H2 {font-family: Verdana,Arial,Helvetica}
    8 H3 {font-family: Verdana,Arial,Helvetica}
    9 A:link, A:visited, A:active { text-decoration: underline }
   10     </style><title>Python and bindings</title></head><body bgcolor="#8b7765" text="#000000" link="#a06060" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="GNOME2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C logo" /></a><a href="http://www.redhat.com"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/XSLT/"><img src="Libxslt-Logo-180x168.gif" alt="Made with Libxslt Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XSLT C library for GNOME</h1><h2>Python and bindings</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Main Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html">Home</a></li><li><a href="intro.html">Introduction</a></li><li><a href="docs.html">Documentation</a></li><li><a href="bugs.html">Reporting bugs and getting help</a></li><li><a href="help.html">How to help</a></li><li><a href="downloads.html">Downloads</a></li><li><a href="FAQ.html">FAQ</a></li><li><a href="news.html">News</a></li><li><a href="xsltproc2.html">The xsltproc tool</a></li><li><a href="docbook.html">DocBook</a></li><li><a href="API.html">The programming API</a></li><li><a href="python.html">Python and bindings</a></li><li><a href="internals.html">Library internals</a></li><li><a href="extensions.html">Writing extensions</a></li><li><a href="contribs.html">Contributions</a></li><li><a href="EXSLT/index.html" style="font-weight:bold">libexslt</a></li><li><a href="xslt.html">flat page</a>, <a href="site.xsl">stylesheet</a></li><li><a href="html/index.html" style="font-weight:bold">API Menu</a></li><li><a href="ChangeLog.html">ChangeLog</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="tutorial/libxslttutorial.html">Tutorial</a>,
   11           <a href="tutorial2/libxslt_pipes.html">Tutorial2</a></li><li><a href="xsltproc.html">Man page for xsltproc</a></li><li><a href="http://mail.gnome.org/archives/xslt/">Mail archive</a></li><li><a href="http://xmlsoft.org/">XML libxml2</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</a></li><li><a href="https://gitlab.gnome.org/GNOME/libxslt/issues">Bug Tracker</a></li><li><a href="http://codespeak.net/lxml/">lxml Python bindings</a></li><li><a href="http://cpan.uwinnipeg.ca/dist/XML-LibXSLT">Perl XSLT bindings</a></li><li><a href="http://www.zend.com/php5/articles/php5-xmlphp.php#Heading17">XSLT with PHP</a></li><li><a href="http://www.mod-xslt2.com/">Apache module</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://xsldbg.sourceforge.net/">Xsldbg Debugger</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="APIchunk0.html">Alphabetic</a></li><li><a href="APIconstructors.html">Constructors</a></li><li><a href="APIfunctions.html">Functions/Types</a></li><li><a href="APIfiles.html">Modules</a></li><li><a href="APIsymbols.html">Symbols</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><p>There is a number of language bindings and wrappers available for libxml2,
   12 the list below is not exhaustive. Please contact the <a href="http://mail.gnome.org/mailman/listinfo/xml-bindings">xml-bindings@gnome.org</a>
   13 (<a href="http://mail.gnome.org/archives/xml-bindings/">archives</a>) in
   14 order to get updates to this list or to discuss the specific topic of libxml2
   15 or libxslt wrappers or bindings:</p><ul>
   16   <li><a href="http://mail.gnome.org/archives/xml/2001-March/msg00014.html">Matt
   17     Sergeant</a> developped <a href="http://axkit.org/download/">XML::LibXML
   18     and XML::LibXSLT</a>, Perl wrappers for libxml2/libxslt as part of the <a href="http://axkit.com/">AxKit XML application server</a></li>
   19   <li><a href="mailto:dkuhlman@cutter.rexx.com">Dave Kuhlman</a> provides and
   20     earlier version of the libxml/libxslt <a href="http://www.rexx.com/~dkuhlman">wrappers for Python</a></li>
   21   <li>Petr Kozelka provides <a href="http://sourceforge.net/projects/libxml2-pas">Pascal units to glue
   22     libxml2</a> with Kylix, Delphi and other Pascal compilers</li>
   23   <li>Wai-Sun "Squidster" Chia provides <a href="http://www.rubycolor.org/arc/redist/">bindings for Ruby</a>  and
   24     libxml2 bindings are also available in Ruby through the <a href="http://libgdome-ruby.berlios.de/">libgdome-ruby</a> module
   25     maintained by Tobias Peters.</li>
   26   <li>Steve Ball and contributors maintains <a href="http://tclxml.sourceforge.net/">libxml2 and libxslt bindings for
   27     Tcl</a></li>
   28   <li><a href="mailto:xmlwrapp@pmade.org">Peter Jones</a> maintains C++
   29     bindings for libxslt within <a href="http://pmade.org/pjones/software/xmlwrapp/">xmlwrapp</a></li>
   30   <li><a href="phillim2@comcast.net">Mike Phillips</a> provides a module
   31     using <a href="http://siasl.dyndns.org/projects/projects.html">libxslt
   32     for PHP</a>.</li>
   33   <li><a href="http://savannah.gnu.org/projects/classpathx/">LibxmlJ</a> is
   34     an effort to create a 100% JAXP-compatible Java wrapper for libxml2 and
   35     libxslt as part of GNU ClasspathX project.</li>
   36   <li>Patrick McPhee provides Rexx bindings fof libxml2 and libxslt, look for
   37     <a href="http://www.interlog.com/~ptjm/software.html">RexxXML</a>.</li>
   38   <li><a href="http://www.satimage.fr/software/en/xml_suite.html">Satimage</a>
   39     provides <a href="http://www.satimage.fr/software/en/downloads_osaxen.html">XMLLib
   40     osax</a>. This is an osax for Mac OS X with a set of commands to
   41     implement in AppleScript the XML DOM, XPATH and XSLT.</li>
   42 </ul><p>The libxslt Python module depends on the <a href="http://xmlsoft.org/python.html">libxml2 Python</a> module.</p><p>The distribution includes a set of Python bindings, which are guaranteed to
   43 be maintained as part of the library in the future, though the Python
   44 interface have not yet reached the completeness of the C API.</p><p><a href="mailto:stephane.bidoul@softwareag.com">Stéphane Bidoul</a>
   45 maintains <a href="http://users.skynet.be/sbi/libxml-python/">a Windows port
   46 of the Python bindings</a>.</p><p>Note to people interested in building bindings, the API is formalized as
   47 <a href="libxslt-api.xml">an XML API description file</a> which allows to
   48 automate a large part of the Python bindings, this includes function
   49 descriptions, enums, structures, typedefs, etc... The Python script used to
   50 build the bindings is python/generator.py in the source distribution.</p><p>To install the Python bindings there are 2 options:</p><ul>
   51   <li>If you use an RPM based distribution, simply install the <a href="http://rpmfind.net/linux/rpm2html/search.php?query=libxml2-python">libxml2-python
   52     RPM</a> and the <a href="http://rpmfind.net/linux/rpm2html/search.php?query=libxslt-python">libxslt-python
   53     RPM</a>.</li>
   54   <li>Otherwise use the <a href="ftp://xmlsoft.org/libxml2/python/">libxml2-python
   55     module distribution</a> corresponding to your installed version of
   56     libxml2 and libxslt. Note that to install it you will need both libxml2
   57     and libxslt installed and run "python setup.py build install" in the
   58     module tree.</li>
   59 </ul><p>The distribution includes a set of examples and regression tests for the
   60 python bindings in the <code>python/tests</code> directory. Here are some
   61 excepts from those tests:</p><h3>basic.py:</h3><p>This is a basic test of XSLT interfaces: loading a stylesheet and a
   62 document, transforming the document and saving the result.</p><pre>import libxml2
   63 import libxslt
   64 
   65 styledoc = libxml2.parseFile("test.xsl")
   66 style = libxslt.parseStylesheetDoc(styledoc)
   67 doc = libxml2.parseFile("test.xml")
   68 result = style.applyStylesheet(doc, None)
   69 style.saveResultToFilename("foo", result, 0)
   70 style.freeStylesheet()
   71 doc.freeDoc()
   72 result.freeDoc()</pre><p>The Python module is called libxslt, you will also need the libxml2 module
   73 for the operations on XML trees. Let's have a look at the objects manipulated
   74 in that example and how is the processing done:</p><ul>
   75   <li><code>styledoc</code> : is a libxml2 document tree. It is obtained by
   76     parsing the XML file "test.xsl" containing the stylesheet.</li>
   77   <li><code>style</code> : this is a precompiled stylesheet ready to be used
   78     by the following transformations (note the plural form, multiple
   79     transformations can resuse the same stylesheet).</li>
   80   <li><code>doc</code> : this is the document to apply the transformation to.
   81     In this case it is simply generated by parsing it from a file but any
   82     other processing is possible as long as one get a libxml2 Doc. Note that
   83     HTML tree are suitable for XSLT processing in libxslt. This is actually
   84     how this page is generated !</li>
   85   <li><code>result</code> : this is a document generated by applying the
   86     stylesheet to the document. Note that some of the stylesheet information
   87     may be related to the serialization of that document and as in this
   88     example a specific saveResultToFilename() method of the stylesheet should
   89     be used to save it to a file (in that case to "foo").</li>
   90 </ul><p>Also note the need to explicitely deallocate documents with freeDoc()
   91 except for the stylesheet document which is freed when its compiled form is
   92 garbage collected.</p><h3>extfunc.py:</h3><p>This one is a far more complex test. It shows how to modify the behaviour
   93 of an XSLT transformation by passing parameters and how to extend the XSLT
   94 engine with functions defined in python:</p><pre>import libxml2
   95 import libxslt
   96 import string
   97 
   98 nodeName = None
   99 def f(ctx, str):
  100     global nodeName
  101 
  102     #
  103     # Small check to verify the context is correcly accessed
  104     #
  105     try:
  106         pctxt = libxslt.xpathParserContext(_obj=ctx)
  107         ctxt = pctxt.context()
  108         tctxt = ctxt.transformContext()
  109         nodeName = tctxt.insertNode().name
  110     except:
  111         pass
  112 
  113     return string.upper(str)
  114 
  115 libxslt.registerExtModuleFunction("foo", "http://example.com/foo", f)</pre><p>This code defines and register an extension function. Note that the
  116 function can be bound to any name (foo) and how the binding is also
  117 associated to a namespace name "http://example.com/foo". From an XSLT point
  118 of view the function just returns an upper case version of the string passed
  119 as a parameter. But the first part of the function also read some contextual
  120 information from the current XSLT processing environement, in that case it
  121 looks for the current insertion node in the resulting output (either the
  122 resulting document or the Result Value Tree being generated), and saves it to
  123 a global variable for checking that the access actually worked.</p><p>For more information on the xpathParserContext and transformContext
  124 objects check the <a href="internals.html">libray internals description</a>.
  125 The pctxt is actually an object from a class derived from the
  126 libxml2.xpathParserContext() with just a couple more properties including the
  127 possibility to look up the XSLT transformation context from the XPath
  128 context.</p><pre>styledoc = libxml2.parseDoc("""
  129 &lt;xsl:stylesheet version='1.0'
  130   xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
  131   xmlns:foo='http://example.com/foo'
  132   xsl:exclude-result-prefixes='foo'&gt;
  133 
  134   &lt;xsl:param name='bar'&gt;failure&lt;/xsl:param&gt;
  135   &lt;xsl:template match='/'&gt;
  136     &lt;article&gt;&lt;xsl:value-of select='foo:foo($bar)'/&gt;&lt;/article&gt;
  137   &lt;/xsl:template&gt;
  138 &lt;/xsl:stylesheet&gt;
  139 """)</pre><p>Here is a simple example of how to read an XML document from a python
  140 string with libxml2. Note how this stylesheet:</p><ul>
  141   <li>Uses a global parameter <code>bar</code></li>
  142   <li>Reference the extension function f</li>
  143   <li>how the Namespace name "http://example.com/foo" has to be bound to a
  144     prefix</li>
  145   <li>how that prefix is excluded from the output</li>
  146   <li>how the function is called from the select</li>
  147 </ul><pre>style = libxslt.parseStylesheetDoc(styledoc)
  148 doc = libxml2.parseDoc("&lt;doc/&gt;")
  149 result = style.applyStylesheet(doc, { "bar": "'success'" })
  150 style.freeStylesheet()
  151 doc.freeDoc()</pre><p>that part is identical, to the basic example except that the
  152 transformation is passed a dictionary of parameters. Note that the string
  153 passed "success" had to be quoted, otherwise it is interpreted as an XPath
  154 query for the childs of root named "success".</p><pre>root = result.children
  155 if root.name != "article":
  156     print "Unexpected root node name"
  157     sys.exit(1)
  158 if root.content != "SUCCESS":
  159     print "Unexpected root node content, extension function failed"
  160     sys.exit(1)
  161 if nodeName != 'article':
  162     print "The function callback failed to access its context"
  163     sys.exit(1)
  164 
  165 result.freeDoc()</pre><p>That part just verifies that the transformation worked, that the parameter
  166 got properly passed to the engine, that the function f() got called and that
  167 it properly accessed the context to find the name of the insertion node.</p><h3>pyxsltproc.py:</h3><p>this module is a bit too long to be described there but it is basically a
  168 rewrite of the xsltproc command line interface of libxslt in Python. It
  169 provides nearly all the functionalities of xsltproc and can be used as a base
  170 module to write Python customized XSLT processors. One of the thing to notice
  171 are:</p><pre>libxml2.lineNumbersDefault(1)
  172 libxml2.substituteEntitiesDefault(1)</pre><p>those two calls in the main() function are needed to force the libxml2
  173 processor to generate DOM trees compliant with the XPath data model.</p><p><a href="bugs.html">Daniel Veillard</a></p></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></body></html>