|
http://in.geocities.com/rsramsam/xslt.htm |
PART-2
======
XSLT IN DOTNET PLATFORM
( DESKTOP-C# &
ASP.net-C#)
We will now see three methods by which we can implement
such xsl
transformation in ASP.net.
a) asp
style modified as aspx
b) using
asp.net's asp:xml tag
c) by
using standard XML classes in DotNet Framework.
--
a) asp style modified for asp.net
---------------------------------
The following aspx file is a slight modification of familiar asp
files.In aspx we have to
declare variables before defining. Also , there is no
'set' or 'get' methods.
----------------------------------------
//
d:\inetpub\wwwroot\xsldemo.aspx
<%
dim
xml as object
xml=server.createobject("microsoft.xmldom")
xml.load(Server.MapPath("students.xml"))
dim
xsl as object
xsl=server.createobject("microsoft.xmldom")
xsl.load(Server.MapPath("xsl1.xsl"))
response.write(xml.transformNode(xsl))
%>
----------------------------------------------------------
We can start the IIS-5 server( normally
it will be running).We should remember to place
the xml & xsl file in the same folder.If we type the URL as "http://localhost/xsldemo.aspx",
we get correct result ( ie) the xml is transformed as per xsl1.xsl and the result
is displayed as a table with yellow background.
**********************************************************
It may be noticed that the above code is in VB.net!
Actually, it is asp code retrofitted for asp.net!The default language for ASP.net is VB.net and that
is why we are able to be indifferent to
uppercase & lowercase.We can display the
result in any browser.
------------
b) using asp:xml tag in asp.net
=================================
There is a far simpler
and elegant method in ASP.net by using asp:xml tag
, as illustrated below.
//
d:\inetpub\wwwroot\xsldemo1.aspx
<%@ page language="c#"
debug="true" %>
<%@ import Namespace="System.Xml"
%>
<%@ import Namespace="System.Xml.Xsl"
%>
<%@ import Namespace="System.Xml.XPath"
%>
<%@ import Namespace="System.IO"
%>
<script runat=server>
void job1(Object o,EventArgs e)
{
xmldso.DocumentSource="students.xml";
xmldso.TransformSource="xsl1.xsl";
}
</script>
<html>
<body>
<form runat=server>
<asp:xml id=xmldso runat=server
/>
<asp:button
text="click" onclick=job1
runat=server />
</form>
</body>
</html>
----------------------------------------------------------
Before taking up the code
for classical xml-transform in asp.net, we can see how it is done in console-mode
c#.
The same packages are referenced in both .
The console-mode c# program follows:
// trax.cs
using System;
using System.Xml;
using System.Xml.Xsl;
using System.Xml.XPath;
using System.IO;
using System.Text;
class trax
{
public
static void
{
StreamReader reader =
new StreamReader("students.xml");
XmlTextReader xmlreader =
new XmlTextReader(reader);
XPathDocument doc =
new XPathDocument(xmlreader);
XslTransform
xsldoc=
new XslTransform();
xsldoc.Load("xsl1.xsl");
StreamWriter writer =
new StreamWriter("result1.htm");
xsldoc.Transform(doc,null,writer);
Console.WriteLine("result
sent to file!");
reader.Close();
xmlreader.Close();
}
}
==========================================================
As we have installed DotNet Framework
SDK1.1 in our system, we get default path
to DotNet binaries. Therefore we can compile the above file from
any folder.
We will assume that we have created the above file
in
g:\c#demo as trax.cs.
g:\c#demo>csc trax.cs
This will compile correctly.
Ensure that students.xml and xsl1.xsl
are available in current folder.
g:\c#demo>trax
(This will run the program and we get the message result sent to
file).We can now easily write similar code to asp.Net as shown below. Carefully
note how the 'using'
in DeskTop-C#
is written as 'import Namespace' in ASP.Net.)
//d:/inetpub/wwwroot/trax.aspx
<%@ page language="c#" debug="true" %>
<%@ Import Namespace="System.Xml"
%>
<%@ Import Namespace="System.Xml.Xsl"
%>
<%@ Import Namespace="System.Xml.XPath"
%>
<%@ Import Namespace="System.IO"
%>
<script runat=server>
public
void Page_Load()
{
StreamReader
reader=
new
StreamReader(Server.MapPath("students.xml"));
XmlTextReader xmlreader=
new XmlTextReader(reader);
XPathDocument doc=
new XPathDocument(xmlreader);
XslTransform xsldoc=
new XslTransform();
xsldoc.Load(Server.MapPath("xsl1.xsl"));
StreamWriter writer =
new
StreamWriter(Server.MapPath("result.htm"));
xsldoc.Transform(doc,null,Response.Output);
reader.Close();
xmlreader.Close();
}
</script>
<html>
<body>
<form runat=server>
</form>
</body>
</html>
So far, we have dealt with
the various methods of effecting transformation and sending it to the browser. If the
transformation is done in server-side, all browsers can display the html
correctly. But, in a tutorial supposedly on j2ee, we have not mentioned
java atall,so far. This, we take up in
part3