# Sunday, August 13, 2006
Sunday, August 13, 2006 2:15:38 PM (GMT Daylight Time, UTC+01:00) ( ASP.NET | C# )

Afgelopen week wilde ik het standaard Xml Control wilde gebruiken, echter was het niet mogelijk XSLT direct als String door te geven, wat voor mijn toepassing wel nodig was. Voor de rest doet het Xml Control exact wat ik wil, dus uitbreiden maar.

Allereerst maken we een nieuwe klasse aan welke erft van System.Web.UI.WebControls.Xml. 
public class XmlExtender : System.Web.UI.WebControls.Xml

Op dit punt kunnen we exact hetzelfde dat het Xml Control kan. Vervolgens maken we een extra property TransformContent.

public string TransformContent
{
  set
  {
    XslTransform xslTrans = new XslTransform();
    xslTrans.Load(XmlReader.Create(new StringReader(value)));
    this.Transform = xslTrans;
  }
}

De naam is zorgvuldig gekozen, er bestaat reeds een property DocumentContent welke xml als string verwacht. TransformContent creeert een xslTransformer en leest de string in. Vervolgens geef ik de de xslTransformer aan Property Transform van het Xml control en heb ik exact de functionaliteit die ik wil hebben. Simpel maar doeltreffend.

Nu kunnen we het control gebruiken in een webapplicatie. Voor het testen van het control heb ik een  demo site ontwikkeld wat een kleine lijst met boeken toont. 

In default.aspx registreren we ons control

<%@ Register Assembly="XmlControlExtender" Namespace="ControlExtenders" TagPrefix="ext" %>

Vervolgens plaatsen we het control op de pagina.

<ext:XmlExtender ID="xmlDemo" runat="server" />

In ons codebehind geven we de documentContent en de Transformcontent mee.

xmlDemo.DocumentContent = GetXml();
xmlDemo.TransformContent = GetXslt();

GetXml geeft het xml document als string terug.

private string GetXml()
{
     StringBuilder s = new StringBuilder();
     s.Append("<?xml version=\"1.0\" encoding=\"utf-8\" ?>");
     s.Append("<books>");
     s.Append("<book><title>Programming .Net Components</title><author>Juval L&#246;wy</author></book>");
     s.Append("<book><title>.Net 2.0 Generics</title><author>Tod Golding</author></book>");
     s.Append("<book><title>Head First Design Patterns</title><author>Freeman &amp; Freeman</author></book>");
     s.Append("</books>");
     return s.ToString();
}

GetXslt geeft de xslt als string terug.

private string GetXslt()
{
   StringBuilder s = new StringBuilder();
   s.Append("<?xml version=\"1.0\" encoding=\"utf-8\"?><xsl:stylesheet version=\"1.0\"  xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">");
   s.Append("<xsl:template match=\"/books\">");
   s.Append("<html><body>");
   s.Append("<xsl:for-each select=\"book\">");
   s.Append("Titel: <xsl:value-of select=\"title\"/><br/>");
   s.Append("Auteur: <xsl:value-of select=\"author\"/><br/><br/>");
   s.Append("</xsl:for-each>");
   s.Append("</body></html>");
   s.Append("</xsl:template>");
   s.Append("</xsl:stylesheet> ");
   return s.ToString();
}

Na het starten van de webapplicatie wordt het XML document netjes opgemaakt door de opgegeven stylesheet.

Met deze blogpost hoop ik aangetoond te hebben dat standaard Webcontrols zich makkelijk laten uitbreiden en moedig een ieder zeker aan dit ook eens te doen. 

XmlControlExtender is vrij te gebruiken in je eigen applicatie. Download de Sourcecode inclusief demo of alleen het control.

Comments [0] | | # 
# Thursday, December 08, 2005
Thursday, December 08, 2005 4:54:54 PM (GMT Standard Time, UTC+00:00) ( C# )

LINQ is een extensie op C# 2.0. LINQ stelt ons in staat Stong Typed Queries op in memory collecties, Relationele data, of XML bestanden uit te voeren. Ook al wordt deze technologie pas in C# 3.0 geïntegreerd is het zeker de moeite waard om eens mee te experimenteren. Onderstaand een lijst met meer links naar informatie:

Comments [0] | | # 
# Monday, December 05, 2005
Monday, December 05, 2005 10:53:10 AM (GMT Standard Time, UTC+00:00) ( C# )

Het C# team heeft een lijst met handige tools op MSDN geplaatst. Meer info vind je hier.

Comments [0] | | #