Windows Phone Developers

Showing posts with label XSLT XML to HTML conversion. Show all posts
Showing posts with label XSLT XML to HTML conversion. Show all posts

Saturday, October 11, 2008

Convert an XML file to HTML file using C#

Convert an XML file to HTML file using XSLT

Data is best stored in XML format, but the presentations are better in HTML. Here is a case where the following data in a XML file needs to be converted to a HTML file


Here is the XML File for conversion

< ?xml version="1.0" encoding="utf-8"? >

< !-- Sample File For Dot Net Tips & Tricks-- >

< !-- http://dotnetdud.blogspot.com -- >

< invoice InvNo="DND1232" InvDate="3-Oct-2008" >

< customer >

< custID >CID134< /custID >

< custName >Allirajan Ramachandran< /custName >

< /customer >

< items >

< item >

< MovieID >F123455< /MovieID >

< MovieName >Happy Days< /MovieName >

< RentedDate >3-Oct-2008< /RentedDate >

< ReturnDate >5-Oct-2008< /ReturnDate >

< /item >

< item >

< MovieID >F123462< /MovieID >

< MovieName >Lord Of Rings< /MovieName >

< RentedDate >3-Oct-2008< /RentedDate >

< ReturnDate >5-Oct-2008< /ReturnDate >

< /item >

< item >

< MovieID >F123232< /MovieID >

< MovieName >Drona< /MovieName >

< RentedDate >1-Oct-2008< /RentedDate >

< ReturnDate >3-Oct-2008< /ReturnDate >

< /item >

< /items >

< /invoice >

The XML file should be transformed to HTML using XSLT. This needs a stylesheet (XSL) defining what needs to be transformed and how it needs to be done.

Here is a sample stylesheet

< ?xml version="1.0" encoding="utf-8"? >

< !-- Om Ganeshaya Namaha-- >

< !-- Om Satguru Seshadri Swamigal Thiruvadike-- >

< !-- Om Varahi Namaha-- >

< !-- Om Saravana Bhava-- >

< xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"

xmlns:vbadud="http://vbadud.in"

>

< msxsl:script implements-prefix="vbadud" language ="C#" >

< ![CDATA[

public string Defaulted(String RetDate)

{

if (DateTime.Parse(RetDate) < DateTime.Now)

{

return "Defaulted";

}

else

{

return "--";

}

}

public string Today()

{

return DateTime.Now.ToString();

}

]] >

< /msxsl:script >

< xsl:output method="html" indent="yes"/ >

< xsl:template match="invoice" >

< h1 >DND Video Library - Invoice< /h1 >

< p >

Invoice Date : =

< xsl:value-of select ="vbadud:Today()"/ >

< /p >

< p >

Invoice No : =

< xsl:value-of select ="@InvNo"/ >

< /p >

< xsl:apply-templates/ >

< /xsl:template >

< xsl:template match ="customer" >

=========== Customer Information =========

< br/ >

Customer ID :=

< xsl:value-of select ="custID"/ >

< br/ >

Customer Name :=

< xsl:value-of select ="custName"/ >

< br/ >

============================================

< br/ >

< xsl:apply-templates/ >

< /xsl:template >

< xsl:template match ="items" >

< table >

< th >Movie ID< /th >

< th >Movie Name< /th >

< th >Rented Date< /th >

< th >Return Date< /th >

< th >Defaulted< /th >

< xsl:apply-templates/ >

< /table >

< /xsl:template >

< xsl:template match ="item" >

< tr >

< td >< xsl:value-of select ="MovieID"/ > < /td >

< td >

< xsl:value-of select ="MovieName"/ >

< /td >

< td >

< xsl:value-of select ="RentedDate"/ >

< /td >

< td >

< xsl:value-of select ="ReturnDate"/ >

< /td >

< td >

< xsl:value-of select ="vbadud:Defaulted(ReturnDate)"/ >

< /td >

< /tr >

< /xsl:template >

< /xsl:stylesheet >

The above stylesheet uses C# scripting to identify defaulters

The following C# code will transform (convert) the XML to HTML

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.IO;

using System.Xml;

using System.Xml.XPath;

using System.Xml.Xsl;

public void transform_Xml2Html()

{

XslCompiledTransform XSLT = new XslCompiledTransform();

XsltSettings settings = new XsltSettings();

settings.EnableScript = true ;

XSLT.Load(@"c:\shasurdata\forblogger\VideoLibXSLTFile.xslt", settings, new XmlUrlResolver() );

XSLT.Transform(XMLFile ,@"c:\shasurdata\forblogger\SalesInvoice.html");

}

settings.EnableScript = true enables scripting in XSL file. The code uses XslCompiledTransform methods to convert the XML files

Simple isn’t it. Here you have the output:

HTML Source

< h1 xmlns:vbadud="http://vbadud.in" >DND Video Library - Invoice< /h1 >

< p xmlns:vbadud="http://vbadud.in" >

Invoice Date : =

04-10-2008 20:37:02< /p >

< p xmlns:vbadud="http://vbadud.in" >

Invoice No : =

DND1232< /p >

=========== Customer Information =========

< br xmlns:vbadud="http://vbadud.in" >

Customer ID :=

CID134< br xmlns:vbadud="http://vbadud.in" >

Customer Name :=

Allirajan Ramachandran< br xmlns:vbadud="http://vbadud.in" >

============================================

< br xmlns:vbadud="http://vbadud.in" >

CID134

Allirajan Ramachandran

< table xmlns:vbadud="http://vbadud.in" >

< th >Movie ID< /th >

< th >Movie Name< /th >

< th >Rented Date< /th >

< th >Return Date< /th >

< th >Defaulted< /th >

< tr >

< td >F123455< /td >

< td >Happy Days< /td >

< td >3-Oct-2008< /td >

< td >5-Oct-2008< /td >

< td >--< /td >

< /tr >

< tr >

< td >F123462< /td >

< td >Lord Of Rings< /td >

< td >3-Oct-2008< /td >

< td >5-Oct-2008< /td >

< td >--< /td >

< /tr >

< tr >

< td >F123232< /td >

< td >Drona< /td >

< td >1-Oct-2008< /td >

< td >3-Oct-2008< /td >

< td >Defaulted< /td >

< /tr >

< /table >


And here is the HTML output





Digg Technorati Delicious StumbleUpon Reddit BlinkList Furl Mixx Facebook Google Bookmark Yahoo
ma.gnolia squidoo newsvine live netscape tailrank mister-wong blogmarks slashdot spurl StumbleUpon