XML Definitions
As with any technology, XML has its own acronym-riddled
lingo. Some of the important acronyms to know include:
Why XML Should Be Used
XML contains a bevy of benefits. Some of the most profound benefits include:
Weakness of XML
XML is, obviously, not a cure-all, free of disadvantages...else we would be using XML and nothing else! There are some drawbacks and weaknesses of XML:
Performance of XML
When you are designing your XML-based Web application and you need to know what kind of performance to expect from your XML server. It is hard to generalize, because there are so many variables -- such as the size of the XML documents, the amount of script code required to process the documents, the amount of output generated, etc. For example, major variables that can affect the performance of MSXML include:
XML and DOM
Microsoft has provided us DOM (Data Object Model for XML). With the XML Document Object Model (DOM), you can load and parse XML files, gather information about those files, and navigate and manipulate those files. To know about the details of XML DOM, please refer to the XML DOM site at Microsoft's site:
http://msdn.microsoft.com/xml/
We are going to create an XML file using static data and Data from Database using ADO. The DOM methods createNode and appendChild, and the text property are used to construct an XML tree.
Above, we looked at the advantages and disadvantages of XML. Now we'll roll up our sleeves and get down to creating (and displaying) some XML documents using ASP code.
XML with ASP
The following example illustrates how to create an XML tree (in memory) and then persist it to disk (using the save method).
<%
Dim xmldoc
Set xmldoc = Server.CreateObject("Microsoft.XMLDOM")
'
Check to see if a document has data. If it does, don't build
it
If (xmldoc.childNodes.length = 0) Then
' Build the XML document
Set root = xmldoc.createNode("element", "Hi-Tech",
"")
xmldoc.appendChild (root)
Set
onode = xmldoc.createNode("element", "Employee",
"")
onode.Text = "Gurpreet Singh"
xmldoc.documentElement.appendChild
(onode)
Set inode = xmldoc.createNode("element", "Address",
"")
onode.appendChild (inode)
Set
child = xmldoc.createNode("element", "Address1",
"")
child.Text = "Nepean Ont"
inode.appendChild (child)
Set child = xmldoc.createNode("element", "Address2",
"")
child.Text = "Canada"
inode.appendChild (child)
End If
xmldoc.save (Server.Mappath("savedI2.xml"))
%>
Here we have created an XMLDOM Object. We then create a Root node and its child node using the createNode function. Finally we append the nodes after assigning the text property to nodes. In the end we save the in-memory XML tree to a file.
We can also build an XML file from the results of a database query. The following example illustrates how to accomplish this. (For this example I used the pubs database, which comes along with SQL Server.)
<%
'Open database connection
Set conn = Server.CreateObject("ADODB.Connection")
dsn = "DSN=pubs;UID=sa;PWD="
conn.Open dsn
'Create XMLDOM Object
Dim xmldoc
Set xmldoc = Server.CreateObject("Microsoft.XMLDOM")
If (xmldoc.childNodes.length = 0) Then
' Build the XML document
Set root = xmldoc.createNode("element", "Hi-Tech",
"")
xmldoc.appendChild (root)
' Queries the database for customer data
Sql = "select au_lname,au_fname,au_id from authors"
Set rs = conn.Execute(Sql)
rs.MoveFirst
'Loop through the recordset
Do While Not rs.EOF
Set onode = xmldoc.createNode("element", "Employee",
"")
xmldoc.documentElement.appendChild (onode)
Set inode = xmldoc.createNode("element", "Name",
"")
inode.Text = rs.fields(0) & " " & rs.fields(1)
onode.appendChild (inode)
'Grab another recordset based on the authorID
Sql = "select title_id,royaltyper from titleauthor
" & _
"where au_id = '" & rs.fields(2) & "'"
Set rs2 = conn.Execute(Sql)
If
Not (rs2.EOF = True And rs2.bof = True) Then
Set inode = xmldoc.createNode("element",
"Titles", "")
onode.appendChild
(inode)
Set child
= xmldoc.createNode("element", "TitleId",
"")
child.Text = rs2.fields(0)
inode.appendChild (child)
Set child = xmldoc.createNode("element", "royalty",
"")
child.Text = rs2.fields(1)
inode.appendChild (child)
rs2.Close
Set rs2 = Nothing
End If
rs.movenext
Loop
Set rs = Nothing
End If
Save the XML doc
xmldoc.save server.mappath("saved.xml")
'------ DISPLAY THE XML DATA ------------
' Linking XML and XSL together
sourceFile = Server.MapPath("saved.xml")
styleFile = Server.MapPath("saved.xsl")
set source = Server.CreateObject("Microsoft.XMLDOM")
source.async = false
source.load(sourceFile)
set style = Server.CreateObject("Microsoft.XMLDOM")
style.async = false
style.load(styleFile)
Response.Write source.transformNode(style)
%>
In the above example we first make the connection to our SQL Server database using Connection Object of ADO. Next, we create the recordset, populating it with the names of our authors in the authors table. We populate a second recordset based on the current authors ID. Eventually, all of this data is incorporated into the XML Tree using the createNode function and finally appending the nodes. Finally, the XML data is displayed using an XSL stylesheet. Remember that XML is designed to not store information on how the data should be displayed. Rather, XML is used only as a holding place for data. To turn an XML document into a nice-looking HTML document, you need to use XSL.
Converting XML to HTML
We can maintain XML data on the server and format it into
HTML using XSL and then send it to the client. We can do
so using any server-side techniques, such as an ASP page.
To use XSL, you need to first create an XSL document. This
document is a glorified stylesheet, explaining how to display
the various XML tags. For example, we could have the following
XSL stylesheet:
<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">
<HTML>
<STYLE>
.fr1 { width: 30em; }
BODY { margin:0px; width: 30em;
font-family: Arial, Helvetica,
sans-serif; font-size: smaller;}
P { margin-top: .5em; margin-bottom:
.25em; }
HR { color: #888888; }
.H1 { color: #660033; font-weight:
bold; vertical-align: top; }
.Param { font-size: smaller; vertical-align:
top; }
.tagline { font-style: italic; font-size: smaller; text-align:
right; }
.body { text-align: justify; background-color: #FFFFDD;
}
.dingbat { font-family: WingDings; font-style: normal; font-size:
xx-small; }
.person { font-weight: bold; }
.label { font-weight: bold; }
.self { font-style: italic; font-size: smaller;}
#menu { border: 2px solid black; padding: 1em; background-color:
#888833; }
.menutext { color: #FFFFDD; font-family: Times, serif; font-style:
italic;
vertical-align: top; text-align:center; }
.menuhead { color: #FFFFDD; font-family: Times, serif; font-weight:
bold;
vertical-align: top; text-align:center; margin-bottom: .5em;
}
</STYLE>
<xsl:for-each select="Hi-Tech/Employee">
<TABLE>
<TR><TD Class="H1"><xsl:value-of
select="Name" /></TD> </TR>
<TR>
<xsl:for-each select="Titles">
<TR><TD><xsl:entity-ref name="nbsp"/></TD>
<TD Class="H1"><xsl:value-of select="TitleId"
/></TD>
<TD Class="H1"><xsl:value-of select="royalty"
/></TD>
</TR>
</xsl:for-each></TR>
</TABLE>
</xsl:for-each>
</HTML>
</xsl:template>
</xsl:stylesheet>
This XSL stylesheet can then be loaded and applied using the transformNode method. (For an example of this, see the previous code example, where, at the end, we displayed the XML data from an ADO recordset using an XSL stylesheet.
Well, I hope this article has answered some of your questions
on XML. Hopefully you've learned some of the advantages
and disadvantages of XML, when it should be used, and how
it can be used.