Start using XML and XSLT to create HTML
Tonight at the Seattle Visual Foxpro user group meeting Richard Stanton gave a great presentation of the new reporting features of VFP9, which is currently available in beta.
The question came up about how to use XSLT to create HTML from XML. I said it could be done in just a few lines of code.
Here’s sample code to do it: it uses the first 4 records of the customer table and creates XML using the CURSORTOXML() function.
It then uses TEXTMERGE to create a 2nd XML string that is the XSLT.
Each of these strings is loaded into its own instance of XMLDOM.
Then the TRANSFORMNODE method applies the XSL to the XML to create the HTML (which is just an HTML table with headers and records), which is then shown in IE.
That’s a lot of acronyms!
USE customer
cursortoxml(0,'cxml',1,0,4) && Create a string variable cxml that contains the first 4 records of customer
TEXT TO cxsl noshow && Create a string variable cxsl: an XSLT that will convert XML to an HTML table
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="https://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html"/>
<xsl:template match="/">
<HTML>
<HEAD>
<TITLE><xsl:value-of select="//VFPData/customer"/></TITLE>
</HEAD>
<BODY>
<table frame="box">
<tr>
<th>Customer ID</th>
<th>CompanyName</th>
<th>ContactName</th>
</tr>
<xsl:for-each select="//VFPData/customer">
<tr>
<td><xsl:value-of select="cust_id"/></td>
<td><xsl:value-of select="company"/></td>
<td><xsl:value-of select="contact"/></td>
</tr>
</xsl:for-each>
</table>
</BODY>
</HTML>
</xsl:template>
</xsl:stylesheet>
ENDTEXT
LOCAL oxml as msxml.DOMDocument, oxsl as msxml.DOMDocument
oxml=NEWOBJECT('msxml.DOMDocument')
oxsl=NEWOBJECT('msxml.DOMDocument') && another instance of the XMLDOM
oxml.loadXML(cxml) && load the cursor XML into the XMLDOM
oxsl.loadXML(cxsl) && load the XSLT that we just created.
cHTML= oxml.transformNode(oxsl) && apply the XSL to the cursor XML
STRTOFILE(cHTML,"d:\t.htm") && put it into a file
!start d:\t.htm && show the file in IE
*End of code
Comments
Anonymous
June 21, 2004
The comment has been removedAnonymous
June 22, 2004
Here is the Fox way without XSLT ;-)
USE customer
cursortoxml(0,'xmlCustomers',1,0,4)
xml = NewObject("Msxml2.DomDocument")
xml.LoadXml(xmlCustomers)
oNodes = xml.SelectNodes("//VFPData/customer")
SET TEXTMERGE ON TO MEMVAR html NOSHOW
<HTML>
<HEAD>
<TITLE>Customers</TITLE>
</HEAD>
<BODY>
<table frame="box">
<tr>
<th>Customer ID</th>
<th>CompanyName</th>
<th>ContactName</th>
</tr>
For Each oNode In oNodes
<tr>
<td><<oNode.SelectSingleNode("cust_id").text>></td>
<td><<oNode.SelectSingleNode("company").text>></td>
<td><<oNode.SelectSingleNode("contact").text>></td>
</tr>
EndFor
</table>
</BODY>
</HTML>
SET TEXTMERGE OFF
SET TEXTMERGE TO
STRTOFILE(html,"c:test.htm")
Modify Command "c:test.htm" NOWAITAnonymous
June 22, 2004
The comment has been removedAnonymous
June 22, 2004
Ok, pure fox, no more acronyms required:
USE customer
SET TEXTMERGE ON TO MEMVAR html NOSHOW
<HTML>
<HEAD>
<TITLE>Customers</TITLE>
</HEAD>
<BODY>
<table frame="box">
<tr>
<th>Customer ID</th>
<th>CompanyName</th>
<th>ContactName</th>
</tr>
Scan Next 4
<tr>
<td><<cust_id>></td>
<td><<company>></td>
<td><<contact>></td>
</tr>
EndScan
</table>
</BODY>
</HTML>
SET TEXTMERGE OFF
SET TEXTMERGE TO
STRTOFILE(html,"c:test.htm") && put it into a file
Modify Command "c:test.htm" NOWAIT
Now that's simplicity
I love U Fox ;-)Anonymous
June 24, 2004
If I change the cursortoxml function to return all records, then some of the CompanyNames display funky characters. i.e. customerID COMMI, OCEAN.
What causes that?
How do you solve that?Anonymous
June 24, 2004
Those records with "funky" characters are those with non English alphabet characters, such as an 'e' with an accent, an 'o' with an umlaut, etc.
Just change the 4th parameter of CursorToXML() to 48 to change the output encoding.Anonymous
April 19, 2006
dfAnonymous
March 21, 2007
thoughts from a professional developer I do not agree. Go to http://www.justjobz.info/imaginary_Belgium/derrick_Flandre/frisian_Knokke-Heist_1.htmlAnonymous
March 21, 2007
thoughts from a professional developer I do not agree. Go to http://www.easyworkz.info/jounce_Germany/cauterization_Mecklenburg-Vorpommern/depot_Rostock_1.htmlAnonymous
March 28, 2007
thoughts from a professional developer I do not agree. Go to http://www.docareers.info/incinerate_Italy/utmost_Veneto/sedum_Venice_1.htmlAnonymous
August 14, 2007
thoughts from a professional developer I do not agree. Go to http://apartments.waw.pl/Anonymous
October 04, 2007
There's a very useful feature that FoxPro users have had for over 2 decades: being able to output textAnonymous
October 04, 2007
There's a very useful feature that FoxPro users have had for over 2 decades: being able to outputAnonymous
December 06, 2007
PingBack from http://msdnrss.thecoderblogs.com/2007/12/06/how-to-create-dynamic-xaml-to-display-arbitrary-xml/Anonymous
January 31, 2008
what is the process of step by step to run a xml program is not defined here.Anonymous
May 29, 2009
PingBack from http://paidsurveyshub.info/story.php?title=calvin-hsia-s-weblog-start-using-xml-and-xslt-to-create-html