IT-SC book 
169
</xsl:template> 
</xsl:stylesheet> 
The  key  to  this  stylesheet  is  well-formedness.  Every  XML  element  in  the  source 
document is accounted for in the stylesheet, and each defers to further processing 
by  placing xsl:apply-templates  square  in  the  middle.  If  you  run  the  XML  and 
stylesheet through your XSLT processor, you get the following HTML:  
<html> 
<body> 
<h1>Sample Text</h1> 
<font size='5'>T</font>his is an example of 
<font color='#FF0000' size='3'> 
<u>Fancy Text</u> 
</font> that comes in 
<font color='#0000FF'>m<font size='5'>u</font> 
</font> 
<font color='#00FF00'> 
<b>l<font size='5'> 
t</font></b> 
</font> 
<font color='#0000FF'>i<font size='5'>p</font> 
</font> 
<font color='#00FF00'> 
<b>l<font size='5'>e</font></b> 
</font> 
colors. Many of <b><i>these</i></b> 
elements are <font size='5'> 
<font color='#00FF00'> 
<b>N</b> 
Pdf create signature - C# PDF File Permission Library: add, remove, update PDF file permission in C#.net, ASP.NET, MVC, WPF
Tell C# users how to set PDF file permissions, like printing, copying, modifying, extracting, annotating, form filling, etc
add signature pdf preview; create signature pdf
Pdf create signature - VB.NET PDF File Permission Library: add, remove, update PDF file permission in vb.net, ASP.NET, MVC, WPF
VB.NET Tutorial for How to Set PDF File Access Permissions Using XDoc.PDF for .NET
add jpeg signature to pdf; create pdf signature
IT-SC book 
170
</font> 
<font color='#0000FF'>E</font> 
<font color='#00FF00'> 
<b>S</b> 
</font> 
<font color='#0000FF'>T</font> 
<font color='#00FF00'> 
<b>E</b> 
</font> 
<font color='#0000FF'>D</font> 
</font> within 
each other. 
</body> 
</html> 
6.5.4 Getting the Value of a Node 
The xsl:value-of element generates output from an expression. It has two possible 
attributes: select  and disable-output-escaping.  The select  attribute  is 
mandatory as it's used to generate the replacement content. The select attribute 
takes an XPath expression. Given the XML <a><b><c id="c">content</c></b></a>
the following expression produces the word "content."  
<xsl:value-of select="/a/b/c"/> 
To retrieve an attribute of an element, use the @ symbol in your select attribute:  
<xsl:value-of select="/a/b/c/@id"/> 
The disable-output-escaping  attribute  causes  the  XSLT  processor  to  suppress 
encoding of characters that could be confused with markup. This can be useful when 
generating text output. For example, consider the document:  
<doc>A &amp; B</doc> 
and this template: 
C# PDF Digital Signature Library: add, remove, update PDF digital
Barcode Read. Barcode Create. OCR. Twain. Edit Digital Signatures. |. Home ›› XDoc.PDF ›› C# PDF: Edit PDF Digital Signature. You maybe interested:
pdf sign in; add signature pdf online
VB.NET PDF Digital Signature Library: add, remove, update PDF
C#.NET Annotate PDF in WPF, C#.NET PDF Create, C#.NET copyright to be respected, XDoc.PDF also allows PDF such security setting via digital signature.
pdf to word converter sign in; add jpg signature to pdf
IT-SC book 
171
<xsl:template match="doc"> 
<xsl:value-of select="text(  )" disable-output-escaping="yes"/> 
</xsl:template> 
If disable-output-escaping were allowed to have its default value of no, the result 
of the template would be presented as A &amp; B — but when the attribute is set to 
yes, the presentation is A & B. This is not needed if the output method is set to text 
using the xsl:output element.  
We have already used the xsl:value-of element in the previous examples in this 
chapter, as it is core to XSLT.  
6.5.5 Iterating over Elements 
The xsl:for-each  element  allows  you  to  iterate  through  certain  element  types 
inside a template match. It has a mandatory select attribute that defines the node 
set  to  be  iterated.  The select  attribute  can  contain  anything  that  results  in  a 
collection  of  elements  or  nodes,  and  can  be  as  simple  as  an  element  name  or 
another type of path expression.  
The xsl:for-each element is helpful when you are working with mixed content and 
want only to transform a subset of elements within a document. For example, the 
following purchases XML document describes multiple types of purchases:  
<?xml version="1.0"?> 
<purchases> 
<product name="floppy disk" price="3.50"/> 
<service name="web updates" price="6.95"/> 
<product name="ink-jet cartridge" price="19.95"/> 
<service name="consulting" price="150h"/> 
</purchases> 
If you are interested only in the product purchases and not services, you could use 
the for-each element to select only the product elements:  
<?xml version="1.0" encoding="iso-8859-1"?> 
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="html"/> 
<xsl:template match="/"> 
C# HTML5 Viewer: Load, View, Convert, Annotate and Edit PDF
XDoc. HTML5 Viewer for C# .NET enables you to create signatures to PDF, including freehand signature, text and date signature. If
pdf signature; adding signature to pdf doc
C#: XDoc.HTML5 Viewer for .NET Online Help Manual
Click to convert PDF document to Word (.docx). PDF and Word (.docx). Annotation Tab. 2. Create Freehand Signature. Click to create a freehand signature.
pdf create signature; add a signature to a pdf file
IT-SC book 
172
<html><body><xsl:apply-templates/> 
</body></html> 
</xsl:template> 
<xsl:template match="purchases"> 
<xsl:for-each select="product"> 
<p>Product: <xsl:value-of select="./@name"/> 
Price: <xsl:value-of select="./@price"/></p> 
</xsl:for-each> 
</xsl:template> 
</xsl:stylesheet> 
This stylesheet generates HTML detailing information about products, but not about 
services.  
XSLT is a substantial programming language and extends well beyond the scope of 
this book. In addition to the elements covered here that allow you to select, search, 
and iterate source XML, XSLT features all sorts of standard language features such 
as  control  structures,  conditionals,  variables,  and  functions.  There  are  several 
resources  available  from  which  you  can  learn  more  about  XSLT;  if  you  are 
considering using XSLT for your projects, a good tutorial introduction is well worth 
the time.  
6.6 A More Complex Example 
In Chapter 3
, we created an XML document that represents the Python classes in the 
PyXML  package  (index.py).  The  pyxml.xml  file  from Chapter 3
is  a  lengthy  XML 
document, and makes a good test subject.  
In this section, we convert the pyxml.xml file back to HTML, but this time using XSLT 
instead  of  a  SAX  driver.  After  using  XSLT  to  perform  this,  the  SAX  and  string 
approach from Chapter 2
will not seem nearly as powerful. However, this  type of 
conversion work is exactly what XSLT is designed to accomplish. The basic structure 
of the pyxml.xml  document consists of a file  element, followed  by one or more 
class elements, followed by one or more method definition elements:  
<file name="../xml/dom/ext/reader/HtmlLib.py"> 
<class name="class HtmlToDomParser(SGMLParser):"> 
<method name="def __init__(self):"/> 
<method name="def unknown_starttag(self,tag,attrs):"/> 
<method name="def unknown_endtag(self, tag):"/> 
C# PDF insert image Library: insert images into PDF in C#.net, ASP
Create high resolution PDF file without image quality users to insert vector images to PDF file. Import graphic picture, digital photo, signature and logo into
adding signature to pdf form; pdf converter sign in
.NET PDF SDK - Description of All PDF Processing Control Feastures
PDF Digital Signature. Create signatures in existing PDF signature fields; Create signatures in new fields which hold the signature;
adding signature to pdf files; create transparent signature stamp for pdf
IT-SC book 
173
<method name="def handle_data(self, data):"/> 
<method name="def handle_comment(self, comment):"/> 
<method name="def handle_generic_node(self, node):"/> 
<method name="def report_unbalanced(self, tag):"/> 
<method name="def toDom(self, st, ownerDoc=None):"/> 
</class> 
</file> 
The above XML represents only a few lines of the 2600 line file. The stylesheet used 
to convert this XML to HTML uses a combination of apply-templates and value-of 
elements to traverse the structure and generate appropriate output.  
The stylesheet starts by creating the HTML opening and closing elements, and calling 
apply-templates to fill in the content:  
<xsl:template match="pyxml"> 
<html> 
<body bgcolor="#FFFFFF" text="#3333FF"> 
<xsl:apply-templates/> 
</body> 
</html> 
</xsl:template> 
Three separate templates, one for each of the element types generated by index.py, 
are defined in the next section and catch the content and generate the appropriate 
HTML output.  
6.6.1 File Template 
To  catch file  elements in pyxml.xml,  create  a  template  that uses  the element's 
name as a match. Once found, HTML is formatted to produce the name of the file in 
red text in a new table row:  
<xsl:template match="file"> 
<p> 
<table cellpadding="0" cellspacing="0" border="1" 
bordercolor="#000000" width="540"> 
<tr> 
C# WPF Viewer: Load, View, Convert, Annotate and Edit Tiff
functionalities. convert Tiff file to PDF, add annotations to Tiff, Create signature on tiff, etc. Please refer to more details below:
adding a signature to a pdf in preview; create signature from pdf
C# WinForms Viewer: Load, View, Convert, Annotate and Edit Tiff
Viewer provides other utility features for processing Tiff while in preview, such as convert Tiff file to PDF, add annotations to Tiff, Create signature on tiff
add signature to pdf; copy and paste signature into pdf
IT-SC book 
174
<td align="center">Source File: 
<b class="filename"><xsl:value-of select="./@name"/></b> 
</td> 
</tr> 
<xsl:apply-templates/> 
</table></p> 
</xsl:template> 
Inside the template, a value-of element is used with a path expression that targets 
the name attribute. After the table row is complete, apply-templates is used to fill in 
the content beneath this element, which may consist of multiple class and method 
elements.  
6.6.2 Class Template 
The class template creates a new table row with the classname, then simply prints 
out the classname:  
<xsl:template match="class"> 
<tr> 
<td>Class: 
<b class="classname"><xsl:value-of select="./@name"/></b> 
</td> 
</tr> 
<xsl:apply-templates/> 
</xsl:template> 
As  shown  earlier,  the apply-templates  instruction  is  used  to  further  fill  in  the 
content beneath this element.  
6.6.3 Method Template 
The method template follows suit and creates its own unique HTML to display method 
names, this time in black text:  
<xsl:template match="method"> 
<tr> 
<td align="left"> 
How to C#: Basic SDK Concept of XDoc.PDF for .NET
create, load, combine, and split PDF file(s), and add, create, insert, delete, re To be specific, you can edit PDF password and digital signature, and set
add signature field to pdf; adding a signature to a pdf
VB.NET PDF: Basic SDK Concept of XDoc.PDF
create, load, combine, and split PDF file(s), and add, create, insert, delete, re To be specific, you can edit PDF password and digital signature, and set
add signature image to pdf; pdf add signature field
IT-SC book 
175
<span class="methodname" 
><xsl:value-of select="./@name"/></span> 
</td> 
</tr> 
</xsl:template> 
Here apply-templates is not used because there are no child elements of a method 
element in the pyxml.xml document.  
Example 6-5
shows the complete listing of pyxml.xsl.  
Example 6-5. pyxml.xsl  
<?xml version="1.0" encoding="UTF-8" ?> 
<xsl:stylesheet 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
version="1.0"> 
<xsl:output method="html"/> 
<xsl:template match="pyxml"> 
<html> 
<body bgcolor="#FFFFFF" text="#3333FF"> 
<xsl:apply-templates/> 
</body> 
</html> 
</xsl:template> 
<xsl:template match="file"> 
<p><table cellpadding="0" cellspacing="0" border="1" 
bordercolor="#000000" width="540"> 
<tr> 
IT-SC book 
176
<td align="center">Source File: 
<b><font color="#FF0000"> 
<xsl:value-of select="./@name"/> 
</font></b> 
</td> 
</tr> 
<xsl:apply-templates/> 
</table></p> 
</xsl:template> 
<xsl:template match="class"> 
<tr> 
<td>Class: <b><xsl:value-of 
select="./@name"/></b> 
</td> 
</tr> 
<xsl:apply-templates/> 
</xsl:template> 
<xsl:template match="method"> 
<tr> 
<td align="left"> 
<font color="#000000"> 
<xsl:value-of select="./@name"/> 
</font> 
</td> 
</tr> 
</xsl:template> 
IT-SC book 
177
</xsl:stylesheet> 
When  you  run  the  transformation  in Example 6-5
 you  produce  a  pyxml.html 
document that shows all of the classes in the PyXML package.  
C:\my-dir> 4xslt pyxml.xml pyxml.xsl > pyxml.html 
6.7 Embedding XSLT Transformations in Python 
XML  is  frequently  used  to  store  the  "core"  version  of  a  document  while 
transformations are used to integrate the data into other systems. For example, you 
may  receive  a  purchase  order  as  XML  over  the  Web  and  dispatch  it  in  several 
different directions (and in different formats) to your other data systems. You may 
parse the XML inserting the data into Oracle tables, transform it to HTML, add it to 
an internal web site, transform the purchase order into another flavor of XML, and 
pass it on to your suppliers.  
Regardless  of  where  you're  sending  your  XML,  the  ability  to  perform  XSLT 
transformations at runtime is critical. The 4XSLT package works nicely from inside 
your Python programs. In this section, we create a Python CGI executable for use 
within Linux and Apache, or in any web server that is configured to run external CGI 
programs.  
The process involves two stylesheets, one XML document, and one CGI executable. 
The first  stylesheet  converts the XML  document  into  HTML  for your  browser.  The 
second stylesheet converts the XML document into HTML for your browser, but adds 
additional HTML allowing you to edit the text of the XML document and update it on 
the server.  The Python  CGI  script exists to run  the  XML through  the  appropriate 
stylesheet based on your actions. The script also takes care of updating the source 
XML on disk. In order for the script to run correctly, it must be placed in a directory 
where the web user (user nobody on Apache and Unix) has permission to write a 
new XML file.  
6.7.1 Creating the Source XML 
For starters, we need to create an XML document. Further updates to the XML can be 
accomplished through the web browser once you've created the CGI script. For now, 
you can get by with the following code saved to disk as story.xml:  
<?xml version="1.0"?> 
<story> 
<title>Web Sites Use XML</title> 
<body> 
It is no surprise, web sites are using XML these days. 
</body> 
IT-SC book 
178
</story> 
Be sure to save the document as story.xml so that the CGI script can find it when 
applying stylesheets.  
6.7.2 Creating a Simple Stylesheet 
The first stylesheet used by the CGI script displays the XML as simple HTML in the 
browser.  It uses  the  XSLT apply-templates  method,  and contains a form button 
labeled Edit Me that reloads the CGI script. When the CGI executes in edit mode, it 
uses the second stylesheet to present the edit form. The simple stylesheet is shown 
below in Example 6-6
. Be sure and save it to disk as story.xsl.  
Example 6-6. story.xsl  
<?xml version="1.0" encoding="iso-8859-1"?> 
<xsl:stylesheet version="1.0"  
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:template match="story"> 
<html> 
<head><title>The Story Page</title></head> 
<body><xsl:apply-templates/> 
</body> 
</html> 
</xsl:template> 
<xsl:template match="title"> 
<h1><xsl:apply-templates/></h1> 
</xsl:template> 
<xsl:template match="body"> 
<p><xsl:apply-templates/></p> 
<p> 
<form action="xslt.cgi" method="get"> 
Documents you may be interested
Documents you may be interested