<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://msmvps.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Search results for 'app:weblogs' matching tag 'Xml'</title><link>http://msmvps.com/search/SearchResults.aspx?q=app:weblogs&amp;tag=Xml&amp;orTags=0&amp;o=DateDescending</link><description>Search results for 'app:weblogs' matching tag 'Xml'</description><dc:language>en-US</dc:language><generator>CommunityServer 2008.5 SP2 (Build: 40407.4157)</generator><item><title>Populating a DataGridView from Xml Data</title><link>http://msmvps.com/blogs/deborahk/archive/2009/10/20/populating-a-datagridview-from-xml-data.aspx</link><pubDate>Tue, 20 Oct 2009 05:00:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1733866</guid><dc:creator>DeborahK</dc:creator><description>&lt;p&gt;If you are using XML in a WinForms application you may find the need to display the XML data in a DataGridView. &lt;/p&gt;  &lt;p&gt;Let&amp;#39;s take this XML:&lt;/p&gt;  &lt;p&gt;&lt;font color="#65402e" face="Consolas"&gt;&amp;lt;states&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;state name=&amp;quot;California&amp;quot;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;abbreviation&amp;gt;CA&amp;lt;/abbreviation&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;year&amp;gt;1850&amp;lt;/year&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;governor&amp;gt;Schwarzenegger&amp;lt;/governor&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/state&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;state name=&amp;quot;Wisconsin&amp;quot;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;abbreviation&amp;gt;WI&amp;lt;/abbreviation&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;year&amp;gt;1848&amp;lt;/year&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;governor&amp;gt;Doyle&amp;lt;/governor&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/state&amp;gt;       &lt;br /&gt;&amp;lt;/states&amp;gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Displaying XML in a DataGridView sounds easy, but if you just set the DataGridView DataSource to the XML data, you will get something like this:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/deborahk.metablogapi/6013.image_5F00_044D9E51.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/deborahk.metablogapi/0552.image_5F00_thumb_5F00_62EDF8B4.png" width="469" height="184" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Notice how it has lots of yuck in it: attribute details, node properties, and so on for every node in the XML. So how do you get something more like this:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/deborahk.metablogapi/5758.image_5F00_3ADB4995.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/deborahk.metablogapi/5736.image_5F00_thumb_5F00_64DB47BD.png" width="463" height="203" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;The trick is to use anonymous types.&lt;/p&gt;  &lt;p&gt;The code is provided here in VB and C# and then described in detail below.&lt;/p&gt;  &lt;p&gt;NOTE: Be sure to set a reference to &lt;strong&gt;System.Core&lt;/strong&gt; and &lt;strong&gt;System.Xml.Linq&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;In C#:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#65402e" face="Consolas"&gt;XElement statesXml = XElement.Parse(&amp;quot;&amp;lt;states&amp;gt;&amp;quot; +      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;quot;&amp;lt;state name=&amp;#39;California&amp;#39;&amp;gt;&amp;quot; +       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;quot;&amp;lt;abbreviation&amp;gt;CA&amp;lt;/abbreviation&amp;gt;&amp;quot; +       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;quot;&amp;lt;year&amp;gt;1850&amp;lt;/year&amp;gt;&amp;quot; +       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;quot;&amp;lt;governor&amp;gt;Schwarzenegger&amp;lt;/governor&amp;gt;&amp;quot; +       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;quot;&amp;lt;/state&amp;gt;&amp;quot; +       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;quot;&amp;lt;state name=&amp;#39;Wisconsin&amp;#39;&amp;gt;&amp;quot; +       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;quot;&amp;lt;abbreviation&amp;gt;WI&amp;lt;/abbreviation&amp;gt;&amp;quot; +       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;quot;&amp;lt;year&amp;gt;1848&amp;lt;/year&amp;gt;&amp;quot; +       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;quot;&amp;lt;governor&amp;gt;Doyle&amp;lt;/governor&amp;gt;&amp;quot; +       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;quot;&amp;lt;/state&amp;gt;&amp;quot; +       &lt;br /&gt;&amp;#160;&amp;#160; &amp;quot;&amp;lt;/states&amp;gt;&amp;quot;); &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#65402e" face="Consolas"&gt;var query = from st in statesXml.Descendants(&amp;quot;state&amp;quot;)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; select new       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Name = st.Attribute(&amp;quot;name&amp;quot;).Value,       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Abbrev = st.Element(&amp;quot;abbreviation&amp;quot;).Value,       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Year = st.Element(&amp;quot;year&amp;quot;).Value,       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Governor = st.Element(&amp;quot;governor&amp;quot;).Value       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; };       &lt;br /&gt;DataGridView1.DataSource = query.ToList();&lt;/font&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;In VB:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#65402e" face="Consolas"&gt;Dim statesXml As XElement = _      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;states&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;state name=&amp;quot;California&amp;quot;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;abbreviation&amp;gt;CA&amp;lt;/abbreviation&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;year&amp;gt;1850&amp;lt;/year&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;governor&amp;gt;Schwarzenegger&amp;lt;/governor&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/state&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;state name=&amp;quot;Wisconsin&amp;quot;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;abbreviation&amp;gt;WI&amp;lt;/abbreviation&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;year&amp;gt;1848&amp;lt;/year&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;governor&amp;gt;Doyle&amp;lt;/governor&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/state&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/states&amp;gt; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#65402e" face="Consolas"&gt;Dim query = From st In statesXml...&amp;lt;state&amp;gt; _      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Select New With { _       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; .Name = st.@name, _       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; .Abbrev = st.&amp;lt;abbreviation&amp;gt;.Value, _       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; .Year = st.&amp;lt;year&amp;gt;.Value, _       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; .Governor = st.&amp;lt;governor&amp;gt;.Value}       &lt;br /&gt;DataGridView1.DataSource = query.ToList&lt;/font&gt; &lt;/p&gt;  &lt;p&gt;The first part of this code builds the XML. The C# code uses the XElement.Parse function to build the XML; VB uses XML literals. This part of the code is not necessary if you are reading the XML from another source, such as a file.&lt;/p&gt;  &lt;p&gt;The second part of the code leverages Linq to XML to process the set of state XML elements. For each element, it uses the Select New syntax to create an anonymous type. The syntax defines an unnamed (anonymous) type with properties Name, Abbrev, Year, and Governor.&lt;/p&gt;  &lt;p&gt;[To view an overview of anonymous types, &lt;a href="http://msmvps.com/blogs/deborahk/archive/2009/08/19/anonymous-types-an-introduction.aspx"&gt;start here&lt;/a&gt;.]&lt;/p&gt;  &lt;p&gt;The last line converts the results of the query to a generic list and assigns it to the DataSource property of the DataGridView. Visual Studio uses the anonymous type property names as the text for the column titles and populates the rows with each state element.&lt;/p&gt;  &lt;p&gt;Use this technique any time you have XML that you want to display in a DataGridView.&lt;/p&gt;  &lt;p&gt;Enjoy!&lt;/p&gt;</description></item><item><title>Many quick updates and first XSLT sample for SharePoint – Event Management System</title><link>/http://feeds.davidlwalker.com/~r/DavidWalker/~3/dF2UIpp82Zg/Many-quick-updates-and-first-XSLT-sample-for-SharePoint-_1320_-Event-Management-System.aspx</link><pubDate>Fri, 11 Sep 2009 05:00:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1722538</guid><dc:creator>Anonymous</dc:creator><description>&lt;p&gt;Okay. Life has been rolling so very fast lately. Here are a few quick updates to as quickly as possible keep everyone updated:&lt;/p&gt;  &lt;p&gt;Jan 24, 2009 – Second annual - &lt;a href="http://www.houstontechfest.com" target="_blank"&gt;HoustonTechFest&lt;/a&gt; – Presented “Building Powerful WebParts with SharePoint 2007” and “WCF for the REST of us”! Awesome audience participation!&lt;/p&gt;  &lt;p&gt;Feb 7, 2009 – Presented at the first annual &lt;a href="http://www.sharepointsaturday.org/kc/default.aspx" target="_blank"&gt;SharePoint Saturday KC&lt;/a&gt; - “Building Powerful WebParts with SharePoint 2007”. Becky Isserman and team did an awesome job! Attended some awesome presentations. Had some great BBQ with &lt;a href="http://daniellarson.spaces.live.com/" target="_blank"&gt;Daniel Larson&lt;/a&gt;!&lt;/p&gt;  &lt;p&gt;March 1-5, 2009 – MVP Summit 09! Totally awesome. Got to see the Gu (&lt;a href="http://weblogs.asp.net/scottgu/" target="_blank"&gt;Scott Guthrie&lt;/a&gt;) and hang out with a bunch of the SharePoint MVPs!&lt;/p&gt;  &lt;p&gt;March 28, 2009 – Second annual &lt;a href="http://www.schoolofdev.com"&gt;School of Dev&lt;/a&gt; / first time to join with SharePoint Saturday! – about 87 people braved the weather reports to attend. It was just rain! Then 9am to 3pm had about 6+ inches of snow drop and stop. Within 24 hours 99.9% was all melted. Presented “Building Powerful WebParts with SharePoint 2007” and “Knowledge (Social) Networking for the Enterprise”&lt;/p&gt;  &lt;p&gt;April 16, 2009 – White paper I wrote for &lt;a href="http://www.quest.com"&gt;Quest.com&lt;/a&gt; was republished on to the home page as a Popular Article on &lt;a href="http://www.sswug.org" target="_blank"&gt;SSWUG.org&lt;/a&gt; – SQL Server and SharePoint – The More You Know, The Better Off You Are (if you are a paid member you can read it &lt;a href="http://www.sswug.org/articles/guestarticle.aspx?id=43649" target="_blank"&gt;here&lt;/a&gt;.)&lt;/p&gt;  &lt;p&gt;April 18, 2009 – &lt;a href="http://www.stlsug.org/MOSSCamp/default.aspx" target="_blank"&gt;St Louis MOSS Camp&lt;/a&gt;! Had a great time presenting – “Building Powerful WebParts with SharePoint 2007“ and attending the other sessions. Becky Isserman and Scott Spradlin talked me into playing Rock band with spoons for drum sticks, didn’t do too bad. LOL&lt;/p&gt;  &lt;p&gt;April 25, 2009 – &lt;a href="http://www.nwacodecamp.com" target="_blank"&gt;NWACodeCamp&lt;/a&gt; – awesome job! Especially for their first event! “Presented Building Powerful WebParts with SharePoint 2007”.&lt;/p&gt;  &lt;p&gt;May 28, 2009 – Baby # 5 – &lt;a href="http://www.kadisonwalker.com/" target="_blank"&gt;Kadison Zoey-Mae Walker&lt;/a&gt; born, thanks to my beautiful wife!&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;a href="http://cid-827e108266572c9c.skydrive.live.com/self.aspx/Family/Kadison/6536%5E_1194422253548%5E_1018176297%5E_30613211%5E_4354548%5E_n.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="Kadison Zoey-Mae Walker, born March 28, 2009" border="0" alt="Kadison Zoey-Mae Walker, born March 28, 2009" src="http://cuhcqw.blu.livefilestore.com/y1pd2xsvHykL0OpJItRRfhK7_Ly8TjqqBBsJErgurKNuOzyQ0YCZToBG_CRd_YZgFnTBUKm3dmQrtavXcam5bu1fw-Toq4H2Ei9/6536_1194422253548_1018176297_30613211_4354548_n.jpg" width="184" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;June 1, 2009 – Two year term as Vice President of the &lt;a href="http://www.ineta.org" target="_blank"&gt;INETA&lt;/a&gt; NORAM Speakers Bureau ended.&lt;/p&gt;  &lt;p&gt;June 22, 2009 – 1st day at Microsoft as a ADC (Application Developer Consultant) – in Dallas at Las Colinas office for New Employee Orientation, after hours - attended &lt;a href="http://www.dfwsharepoint.com/" target="_blank"&gt;DFW SharePoint&lt;/a&gt; group that night and saw Ted Pattison!&lt;/p&gt;  &lt;p&gt;June 23, 2009 – Day 2 at Microsoft, after hours – attended &lt;a href="http://www.dallasasp.net/" target="_blank"&gt;Dallas ASP .NET User Group&lt;/a&gt; where Dr. Tobias Komischke, Director of User Experience @ &lt;a href="http://www.infragistics.com" target="_blank"&gt;Infragistics&lt;/a&gt; presented.&lt;/p&gt;  &lt;p&gt;June 29, 2009 – Turned over &lt;a href="http://www.tulsadevelopers.net" target="_blank"&gt;Tulsa Developers .NET&lt;/a&gt; user group to the very capable Vice-President Sean Whitesell and the other groups to their respective leaders as well.&lt;/p&gt;  &lt;p&gt;July 2, 2009 – My beautiful bride and I celebrated our 15th wedding anniversary&lt;/p&gt;  &lt;p&gt;July 27-31, 2009 – TechReady 9 in Seattle. I thought the MVP Summit was huge. Wow. Amazing time, learned a lot, and met a lot of new people. Plus, folks I haven’t seen in awhile – Zewei Song, Michael Wiley, Steve Walker.. and lots of new friends!&lt;/p&gt;  &lt;p&gt;Okay.. whew. There’s a whole lot more in there as well, between the monthly &lt;a href="http://www.tulsadevelopers.net" target="_blank"&gt;TulsaDevelopers.NET&lt;/a&gt;, &lt;a href="http://www.tulsasql.com" target="_blank"&gt;Tulsa SQL Server Group&lt;/a&gt;, &lt;a href="http://www.tulsasharepoint.com" target="_blank"&gt;Tulsa SharePoint Interest Group&lt;/a&gt; and &lt;a href="http://www.tulsajava.com" target="_blank"&gt;Tulsa Java Developers Group&lt;/a&gt; that I was involved with every month until recently due to my commute and some new &lt;a href="http://www.nwasql.org" target="_blank"&gt;NWASQL Server User Group&lt;/a&gt; meetings at lunch. But, my “quick” update has turned into a lot more.&lt;/p&gt;  &lt;p&gt;Now… finally on to the code!&lt;/p&gt;  &lt;p&gt;For those of you that haven’t seen my “Building Powerful WebParts for SharePoint 2007” session, I totally love writing code and utilizing SharePoint as an application development platform. But, it took several years and practically hundreds of contacts to find a hosting company able and generous enough to donate/sponsor a virtual server for the &lt;a href="http://www.tulsatechfest.com" target="_blank"&gt;TulsaTechFest.com&lt;/a&gt; web site and for the Tulsa User Groups I am involved with.&lt;/p&gt;  &lt;p&gt;Due to timing, I had to build out the site last year so quickly that I took the opportunity to explore the functionality of SharePoint Designer 2007 for the first time.&lt;/p&gt;  &lt;p&gt;I utilized it to enable friendly url’s in SharePoint (can anyone say /Pages)? yuck!&lt;/p&gt;  &lt;p&gt;I copied the 2008 content as a Site Template to kick start the 2009 site. But that left a lot of extra data, so I just recently added an “Active” Yes/No checkbox to the Speakers List. That’s one thing I’ve learned over the last 4 years of running large events, the agenda is bound to change up to the last minute.&lt;/p&gt;  &lt;p&gt;Starting with Visual Studio 2008, it offered the excellent ability to debug XSLT! I took advantage of that, to deliver a no-code solution for the Event Management, by parsing the SharePoint List RSS feed utilizing XSLT. The default RSS feed is kind of gnarly to work with, but I’ve managed to work around it. (See my WSS_LIST_RSS_FIELDS.xsl distributed as part of my &lt;a href="http://powerquerywebpart.codeplex.com/" target="_blank"&gt;PowerQueryWebPart&lt;/a&gt; CodePlex project for a great reusable parser.)&lt;/p&gt;  &lt;p&gt;Ironically, when I first added the Active filter to the xsl:for-each statement the xsl:sort quit sorting by the SortOrder number column. Very strange. Open in Visual Studio 2010 Beta 1, same results. Sleep on it. Deploy today, so I could share with the world and get some others input and boom – it works!&lt;/p&gt;  &lt;p&gt;For some reason Visual Studio 2008 isn’t showing the Debug XSLT option every so often. Visual Studio 2010 Beta 1 is showing it with no issues. Reopened it and reran the Debug XSLT option and boom – working every time now. Very strange. I’ll chalk both issues up to Visual Studio 2010 Beta 1 testing. All working great now.&lt;/p&gt;  &lt;p&gt;So, simply create a Speakers list with the following columns: Title (FirstName LastName), Bio, Link, Company, Tagline, SortOrder (Number), Active (Yes/No) and you’re ready to role!&lt;/p&gt;  &lt;p&gt;I have a SiteImages Picture Library with a sub folder called Speakers where the images are stored: Title(spaces replaced with __).jpg.&lt;/p&gt;  &lt;p&gt;The following XSLT shows a 3 column right rail for speakers filtered by Active flag, sorted by SortOrder, Title&lt;/p&gt;  &lt;p&gt;&amp;lt;xsl:transform&amp;#160; version=&amp;quot;2.0&amp;quot; xmlns:xsl=&amp;quot;&lt;a href="http://www.w3.org/1999/XSL/Transform&amp;quot;"&gt;http://www.w3.org/1999/XSL/Transform&amp;quot;&lt;/a&gt; xmlns:xs=&amp;quot;&lt;a href="http://www.w3.org/2001/XMLSchema&amp;quot;"&gt;http://www.w3.org/2001/XMLSchema&amp;quot;&lt;/a&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; exclude-result-prefixes=&amp;quot;xsl xs&amp;quot; xmlns:ddwrt2=&amp;quot;urn:frontpage:internal&amp;quot;&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:output method=&amp;quot;html&amp;quot;/&amp;gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:template match=&amp;quot;rss/channel&amp;quot; xmlns:ddwrt=&amp;quot;&lt;a href="http://schemas.microsoft.com/WebParts/v2/DataView/runtime&amp;quot;"&gt;http://schemas.microsoft.com/WebParts/v2/DataView/runtime&amp;quot;&lt;/a&gt;&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot;&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;tr&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;td&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:for-each select=&amp;quot;item[substring-before(substring-after(description, &amp;#39;Active:&amp;amp;lt;/b&amp;amp;gt;&amp;#39;), &amp;#39;&amp;amp;lt;/div&amp;amp;gt;&amp;#39;)=&amp;#39; Yes&amp;#39;]&amp;quot;&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:sort select=&amp;quot;substring-before(substring-after(description, &amp;#39;SortOrder:&amp;amp;lt;/b&amp;amp;gt;&amp;#39;), &amp;#39;&amp;amp;lt;/div&amp;amp;gt;&amp;#39;)&amp;quot; data-type=&amp;quot;number&amp;quot; order=&amp;quot;ascending&amp;quot;/&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:sort select=&amp;quot;title&amp;quot; /&amp;gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;!--&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:if test=&amp;quot;substring-before(substring-after(description, &amp;#39;Active:&amp;amp;lt;/b&amp;amp;gt;&amp;#39;), &amp;#39;&amp;amp;lt;/div&amp;amp;gt;&amp;#39;)=&amp;#39; Yes&amp;#39;&amp;quot;&amp;gt;--&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;a&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:attribute name=&amp;quot;href&amp;quot;&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;!--     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:call-template name=&amp;quot;getWSSDescriptionField&amp;quot;&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:with-param name=&amp;quot;description&amp;quot; select=&amp;quot;description&amp;quot;/&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:with-param name=&amp;quot;fieldName&amp;quot; select=&amp;quot;&amp;#39;Link&amp;#39;&amp;quot;/&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/xsl:call-template&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; --&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:value-of select=&amp;quot;concat(concat(&amp;#39;/Tulsa/2009/Speakers/&amp;#39;, translate(title, &amp;#39; ,.&amp;#39;,&amp;#39;&amp;#39;)), &amp;#39;/&amp;#39;)&amp;quot;/&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/xsl:attribute&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;img border=&amp;quot;1&amp;quot; style=&amp;quot;border-color: black;&amp;quot; hspace=&amp;quot;3&amp;quot; vspace=&amp;quot;3&amp;quot; width=&amp;quot;46&amp;quot; height=&amp;quot;60&amp;quot;&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:attribute name=&amp;quot;src&amp;quot;&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:text&amp;gt;/Tulsa/2009/SiteImages/Speakers/&amp;lt;/xsl:text&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:value-of select =&amp;quot;translate(title,&amp;#39; ,.&amp;#39;,&amp;#39;_&amp;#39;)&amp;quot;/&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:text&amp;gt;.jpg&amp;lt;/xsl:text&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/xsl:attribute &amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:attribute name=&amp;quot;alt&amp;quot;&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:variable name=&amp;quot;tagline&amp;quot;&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:call-template name=&amp;quot;getWSSDescriptionField&amp;quot;&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:with-param name=&amp;quot;description&amp;quot; select=&amp;quot;description&amp;quot;/&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:with-param name=&amp;quot;fieldName&amp;quot; select=&amp;quot;&amp;#39;Tagline&amp;#39;&amp;quot;/&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/xsl:call-template&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/xsl:variable&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:if test=&amp;quot;$tagline!=&amp;#39;&amp;#39;&amp;quot;&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:value-of select=&amp;quot;$tagline&amp;quot;/&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/xsl:if&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:variable name=&amp;quot;company&amp;quot;&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:call-template name=&amp;quot;getWSSDescriptionField&amp;quot;&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:with-param name=&amp;quot;description&amp;quot; select=&amp;quot;description&amp;quot;/&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:with-param name=&amp;quot;fieldName&amp;quot; select=&amp;quot;&amp;#39;Company&amp;#39;&amp;quot;/&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/xsl:call-template&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/xsl:variable&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:if test=&amp;quot;$company!=&amp;#39;&amp;#39;&amp;quot;&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:value-of select=&amp;quot;$company&amp;quot;/&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/xsl:if&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/xsl:attribute&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/img&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/a&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:if test=&amp;quot;position() mod 3 = 0&amp;quot;&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;br/&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/xsl:if&amp;gt;     &lt;br /&gt;&amp;lt;!--&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/xsl:if&amp;gt;--&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/xsl:for-each&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/td&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/tr&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/table&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/xsl:template&amp;gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:template name=&amp;quot;string-replace-all&amp;quot;&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:param name=&amp;quot;text&amp;quot;/&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:param name=&amp;quot;replace&amp;quot;/&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:param name=&amp;quot;with&amp;quot;/&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:choose&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:when test=&amp;quot;contains($text, $replace)&amp;quot;&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:value-of select=&amp;quot;substring-before($text, $replace)&amp;quot;/&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:value-of select=&amp;quot;$with&amp;quot;/&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:call-template name=&amp;quot;string-replace-all&amp;quot;&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:with-param name=&amp;quot;text&amp;quot; select=&amp;quot;substring-after($text, $replace)&amp;quot;/&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:with-param name=&amp;quot;replace&amp;quot; select=&amp;quot;$replace&amp;quot;/&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:with-param name=&amp;quot;with&amp;quot; select=&amp;quot;$with&amp;quot;/&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/xsl:call-template&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/xsl:when&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:otherwise&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:value-of select=&amp;quot;$text&amp;quot;/&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/xsl:otherwise&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/xsl:choose&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/xsl:template&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:template name=&amp;quot;getWSSDescriptionField&amp;quot;&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:param name=&amp;quot;description&amp;quot;/&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:param name=&amp;quot;fieldName&amp;quot;/&amp;gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:variable name=&amp;quot;before&amp;quot; select=&amp;quot;concat($fieldName,&amp;#39;:&amp;amp;lt;/b&amp;amp;gt; &amp;#39;)&amp;quot; /&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:variable name=&amp;quot;after&amp;quot; select =&amp;quot;&amp;#39;&amp;amp;lt;/div&amp;amp;gt;&amp;#39;&amp;quot; /&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:variable name=&amp;quot;htmlFieldStart&amp;quot; select=&amp;quot;&amp;#39;&amp;amp;lt;div class=ExternalClass&amp;#39;&amp;quot; /&amp;gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:variable name = &amp;quot;leftRemoved&amp;quot; &amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:value-of disable-output-escaping=&amp;quot;yes&amp;quot; select=&amp;quot;substring-after($description,$before)&amp;quot;/&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/xsl:variable&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:variable name = &amp;quot;results&amp;quot;&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:value-of disable-output-escaping=&amp;quot;yes&amp;quot; select=&amp;quot;substring-before($leftRemoved,$after)&amp;quot; /&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/xsl:variable&amp;gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;!-- HTML fields have extra &amp;lt;div&amp;gt;--&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:choose&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:when test=&amp;quot;starts-with($results, $htmlFieldStart)&amp;quot;&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:value-of disable-output-escaping=&amp;quot;yes&amp;quot; select=&amp;quot;substring-after($results,&amp;#39;&amp;amp;gt;&amp;#39;)&amp;quot; /&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/xsl:when &amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:otherwise&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:choose&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:when test=&amp;quot;contains($results, &amp;#39;&amp;amp;amp;amp&amp;#39;)&amp;quot;&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:call-template name=&amp;quot;string-replace-all&amp;quot;&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:with-param name=&amp;quot;text&amp;quot; select=&amp;quot;$results&amp;quot;/&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:with-param name=&amp;quot;replace&amp;quot; select=&amp;quot;&amp;#39;&amp;amp;amp;amp;&amp;#39;&amp;quot;/&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:with-param name=&amp;quot;with&amp;quot; select=&amp;quot;&amp;#39;&amp;amp;amp;&amp;#39;&amp;quot;/&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/xsl:call-template&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/xsl:when&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:otherwise&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:value-of disable-output-escaping=&amp;quot;yes&amp;quot; select=&amp;quot;$results&amp;quot;/&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/xsl:otherwise&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/xsl:choose&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/xsl:otherwise&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/xsl:choose&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/xsl:template&amp;gt;     &lt;br /&gt;&amp;lt;/xsl:transform&amp;gt;&lt;/p&gt;  &lt;p&gt;I’ll continue explaining more of the other sections of the site, plans for the future and more in upcoming posts!&lt;/p&gt;  &lt;p&gt;I definitely don’t claim to be an XSLT expert. I’ve just managed to keep making it do what I need as I need to over the years. It is an excellent way to build functionality into SharePoint with no-code out of the box web parts.&lt;/p&gt;  &lt;p&gt;Let me know if you have any questions and/or suggestions for improvements!&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:846fe820-8fa2-4bf6-aff0-8fe82195b137" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/SharePoint" rel="tag"&gt;SharePoint&lt;/a&gt;,&lt;a href="http://technorati.com/tags/XSLT" rel="tag"&gt;XSLT&lt;/a&gt;,&lt;a href="http://technorati.com/tags/MVP" rel="tag"&gt;MVP&lt;/a&gt;,&lt;a href="http://technorati.com/tags/MVPSummit" rel="tag"&gt;MVPSummit&lt;/a&gt;,&lt;a href="http://technorati.com/tags/TechReady" rel="tag"&gt;TechReady&lt;/a&gt;,&lt;a href="http://technorati.com/tags/TechReady9" rel="tag"&gt;TechReady9&lt;/a&gt;,&lt;a href="http://technorati.com/tags/STLMOSSCAMP" rel="tag"&gt;STLMOSSCAMP&lt;/a&gt;,&lt;a href="http://technorati.com/tags/SharePointSaturday" rel="tag"&gt;SharePointSaturday&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Kansas+City" rel="tag"&gt;Kansas City&lt;/a&gt;,&lt;a href="http://technorati.com/tags/DFW+SharePoint" rel="tag"&gt;DFW SharePoint&lt;/a&gt;,&lt;a href="http://technorati.com/tags/ADC" rel="tag"&gt;ADC&lt;/a&gt;&lt;/div&gt;
&lt;div class="shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href="mailto:?body=Thought%20you%20might%20like%20this:%20http://aspadvice.com/blogs/davidwalker/archive/2009/09/11/Many-quick-updates-and-first-XSLT-sample-for-SharePoint-_1320_-Event-Management-System.aspx&amp;amp;;subject=Many+quick+updates+and+first+XSLT+sample+for+SharePoint+%e2%80%93+Event+Management+System" target="_blank" title="Post http://aspadvice.com/blogs/davidwalker/archive/2009/09/11/Many-quick-updates-and-first-XSLT-sample-for-SharePoint-_1320_-Event-Management-System.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href="http://del.icio.us/post?url=http://aspadvice.com/blogs/davidwalker/archive/2009/09/11/Many-quick-updates-and-first-XSLT-sample-for-SharePoint-_1320_-Event-Management-System.aspx&amp;amp;;title=Many+quick+updates+and+first+XSLT+sample+for+SharePoint+%e2%80%93+Event+Management+System" target="_blank" title="Post http://aspadvice.com/blogs/davidwalker/archive/2009/09/11/Many-quick-updates-and-first-XSLT-sample-for-SharePoint-_1320_-Event-Management-System.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href="http://www.digg.com/submit?url=http://aspadvice.com/blogs/davidwalker/archive/2009/09/11/Many-quick-updates-and-first-XSLT-sample-for-SharePoint-_1320_-Event-Management-System.aspx&amp;amp;;phase=2" target="_blank" title="Post http://aspadvice.com/blogs/davidwalker/archive/2009/09/11/Many-quick-updates-and-first-XSLT-sample-for-SharePoint-_1320_-Event-Management-System.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href="http://reddit.com/submit?url=http://aspadvice.com/blogs/davidwalker/archive/2009/09/11/Many-quick-updates-and-first-XSLT-sample-for-SharePoint-_1320_-Event-Management-System.aspx&amp;amp;title=Many+quick+updates+and+first+XSLT+sample+for+SharePoint+%e2%80%93+Event+Management+System" target="_blank" title="Post http://aspadvice.com/blogs/davidwalker/archive/2009/09/11/Many-quick-updates-and-first-XSLT-sample-for-SharePoint-_1320_-Event-Management-System.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href="http://www.dotnetkicks.com/submit/?url=http://aspadvice.com/blogs/davidwalker/archive/2009/09/11/Many-quick-updates-and-first-XSLT-sample-for-SharePoint-_1320_-Event-Management-System.aspx&amp;amp;;title=Many+quick+updates+and+first+XSLT+sample+for+SharePoint+%e2%80%93+Event+Management+System" target="_blank" title="Post http://aspadvice.com/blogs/davidwalker/archive/2009/09/11/Many-quick-updates-and-first-XSLT-sample-for-SharePoint-_1320_-Event-Management-System.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href="https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://aspadvice.com/blogs/davidwalker/archive/2009/09/11/Many-quick-updates-and-first-XSLT-sample-for-SharePoint-_1320_-Event-Management-System.aspx&amp;amp;;title=Many+quick+updates+and+first+XSLT+sample+for+SharePoint+%e2%80%93+Event+Management+System&amp;amp;;top=1" target="_blank" title="Post http://aspadvice.com/blogs/davidwalker/archive/2009/09/11/Many-quick-updates-and-first-XSLT-sample-for-SharePoint-_1320_-Event-Management-System.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://aspadvice.com/aggbug.aspx?PostID=56250" width="1" height="1" alt="" /&gt;&lt;img src="http://feeds.feedburner.com/~r/DavidWalker/~4/dF2UIpp82Zg" height="1" width="1" alt="" /&gt;</description></item><item><title>Updates on the Snippet Editor</title><link>http://msmvps.com/blogs/bill/archive/2009/09/03/updates-on-the-snippet-editor.aspx</link><pubDate>Thu, 03 Sep 2009 05:00:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1720398</guid><dc:creator>bill</dc:creator><description>&lt;p&gt;First the good news :&lt;/p&gt;  &lt;p&gt;The February release of the &lt;a href="http://billmccarthy.com/Projects/Snippet_Editor/default.html"&gt;Snippet Editor&lt;/a&gt; has now had &lt;strong&gt;10,000&lt;/strong&gt; downloads !&lt;/p&gt;  &lt;p&gt;Now for bug fix news:&lt;/p&gt;  &lt;p&gt;There were a couple of issues with the paths per language.&amp;#160; A problem with Express Editions of Visual Studio occurred due to partial entries in the registry I didn’t for-see. Initial design and testing was done with full versions of Visual Studio, but I want to ensure that it does work with the express versions, that’s why the tool is standalone not an add-in.&amp;#160; So the good news is I have fixed those bugs (I think).&amp;#160; &lt;/p&gt;  &lt;p&gt;If you want those fixes you can use the original source from Feb and just &lt;a href="http://snippeteditor.codeplex.com/SourceControl/changeset/view/36425#391917"&gt;download the updated products.vb&lt;/a&gt; file. I’ll probably look at rolling this up into a new release in the not to distant future.&lt;/p&gt;  &lt;p&gt;Enjoy :)&lt;/p&gt;</description></item><item><title>Text Files</title><link>http://msmvps.com/blogs/deborahk/archive/2009/08/25/text-files.aspx</link><pubDate>Tue, 25 Aug 2009 05:00:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1718133</guid><dc:creator>DeborahK</dc:creator><description>&lt;p&gt;There are many different types of text files that you may need to process in your applications. Some of the more common types are described in this post.&lt;/p&gt;  &lt;h2&gt;&lt;strong&gt;Delimited files&lt;/strong&gt;&lt;/h2&gt;  &lt;p&gt;Delimited files separate the fields of the file with some type of a delimiter. The most common delimited files are comma separated value (CSV) files, as shown below. &lt;/p&gt;  &lt;p&gt;&lt;font color="#65402e" face="Consolas"&gt;1,&amp;#160; Baggins, Bilbo, 20090811      &lt;br /&gt;2,&amp;#160; Baggins, Frodo, 20090801       &lt;br /&gt;3,&amp;#160; Gamgee,&amp;#160; Samwise, 20090820       &lt;br /&gt;4,&amp;#160; Cotton,&amp;#160; Rosie, 20090821&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Other field delimiters, such as tabs or semicolons, can also be used. &lt;/p&gt;  &lt;p&gt;In most cases, delimited files define the end of each record with a CrLf (carriage return/linefeed). So the example above contains four records, one for each line of data.&lt;/p&gt;  &lt;p&gt;If you need to read the data from a delimited file into your application, there are features in .NET to assist you.&lt;/p&gt;  &lt;p&gt;You can read the file directly using the file classes within .NET and then process the columns using String functions.&lt;/p&gt;  &lt;p&gt;Alternatively, you can read the file into a DataTable, &lt;em&gt;even if you have no plans to use this data in a database&lt;/em&gt;. This allows you to work with the data as a set of rows and columns instead of using a large number of string manipulation functions. See &lt;a href="http://msmvps.com/blogs/deborahk/archive/2009/08/25/reading-comma-delimited-files.aspx" target="_blank"&gt;this link&lt;/a&gt; for an example of reading a CSV text file into an in-memory DataTable.&lt;/p&gt;  &lt;p&gt;Another option is to read the file using VB&amp;#39;s TextFieldParser class. See &lt;a href="http://msmvps.com/blogs/deborahk/archive/2009/08/25/reading-comma-delimited-files-textfieldparser.aspx" target="_blank"&gt;this link&lt;/a&gt; for an example.&lt;/p&gt;  &lt;h2&gt;&lt;strong&gt;Fixed length files&lt;/strong&gt;&lt;/h2&gt;  &lt;p&gt;Fixed length files define data within specific columns. In the example below, the customer Id is left-justified in the first 8 columns, the last name is left-justified in the next 20 columns, the first name is left-justified in the next 10 columns, and the last edit date is left justified in the last 10 columns.&lt;/p&gt;  &lt;p&gt;&lt;font color="#65402e" face="Consolas"&gt;000001&amp;#160; Baggins&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Bilbo&amp;#160;&amp;#160;&amp;#160;&amp;#160; 20090811      &lt;br /&gt;000002&amp;#160; Baggins&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Frodo&amp;#160;&amp;#160;&amp;#160;&amp;#160; 20090801       &lt;br /&gt;000003&amp;#160; Gamgee&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Samwise&amp;#160;&amp;#160; 20090820       &lt;br /&gt;000004&amp;#160; Cotton&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Rosie&amp;#160;&amp;#160;&amp;#160;&amp;#160; 20090821&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;As with delimited files, the end of each record is normally defined with a CrLf (carriage return/linefeed). So the example above contains four records, one for each line of data.&lt;/p&gt;  &lt;p&gt;This style of text file is often used by legacy systems, especially mainframe systems.&lt;/p&gt;  &lt;p&gt;The StringBuilder class in the .NET framework provides easy to use formatting features that help you write code to output fixed length files. See &lt;a href="http://msmvps.com/blogs/deborahk/archive/2009/07/21/formatting-text-files.aspx" target="_blank"&gt;this link&lt;/a&gt; for an example.&lt;/p&gt;  &lt;p&gt;If you need to read the data from a delimited file into your application, there are features in .NET to assist you.&lt;/p&gt;  &lt;p&gt;You can read the file directly using the file classes within .NET and then process the columns using String functions.&lt;/p&gt;  &lt;p&gt;Alternatively, you can read the file into a DataTable, &lt;em&gt;even if you have no plans to use this data in a database&lt;/em&gt;. This allows you to work with the data as a set of rows and columns instead of using a large number of string manipulation functions. See &lt;a href="http://msmvps.com/blogs/deborahk/archive/2009/08/25/reading-fixed-length-files.aspx" target="_blank"&gt;this link&lt;/a&gt; for an example of reading a fixed length file into an in-memory DataTable.&lt;/p&gt;  &lt;p&gt;Another option is to read the file using VB&amp;#39;s TextFieldParser class. See &lt;a href="http://msmvps.com/blogs/deborahk/archive/2009/08/25/reading-fixed-length-files-textfieldparser.aspx" target="_blank"&gt;this link&lt;/a&gt; for an example.&lt;/p&gt; &lt;strong&gt;   &lt;h2&gt;&lt;strong&gt;XML files&lt;/strong&gt;&lt;/h2&gt; &lt;/strong&gt;  &lt;p&gt;XML (eXtensible Markup Language) files follow the XML specification to define hierarchical data. You use XML elements, defined with start (&amp;lt; &amp;gt;) and end (&amp;lt;/ &amp;gt;) tags and XML attributes, define with name/value pairs within a start element tag, to define the structure and content of a file.&lt;/p&gt;  &lt;p&gt;For example, this XML file defines a set of customers, each delimited within customer tags. Each field defined for the customer is defined in an element within the customer open and close tags. In the example below, each customer has a CustomerId, LastName, FirstName, and LastUpdateData.&lt;/p&gt;  &lt;p&gt;&lt;font color="#65402e" face="Consolas"&gt;&amp;lt;customers&amp;gt;      &lt;br /&gt;&amp;#160; &amp;lt;customer&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;CustomerId&amp;gt;1&amp;lt;/CustomerId&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;LastName&amp;gt;Baggins&amp;lt;/LastName&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;FirstName&amp;gt;Billbo&amp;lt;/FirstName&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;LastUpdateDate&amp;gt;20090811&amp;lt;/LastUpdateDate&amp;gt;       &lt;br /&gt;&amp;#160; &amp;lt;/customer&amp;gt;       &lt;br /&gt;&amp;#160; &amp;lt;customer&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;CustomerId&amp;gt;2&amp;lt;/CustomerId&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;LastName&amp;gt;Baggins&amp;lt;/LastName&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;FirstName&amp;gt;Frodo&amp;lt;/FirstName&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;LastUpdateDate&amp;gt;20090801&amp;lt;/LastUpdateDate&amp;gt;       &lt;br /&gt;&amp;#160; &amp;lt;/customer&amp;gt;       &lt;br /&gt;&amp;#160; &amp;lt;customer&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;CustomerId&amp;gt;3&amp;lt;/CustomerId&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;LastName&amp;gt;Gamgee&amp;lt;/LastName&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;FirstName&amp;gt;Samwise&amp;lt;/FirstName&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;LastUpdateDate&amp;gt;20090820&amp;lt;/LastUpdateDate&amp;gt;       &lt;br /&gt;&amp;#160; &amp;lt;/customer&amp;gt;       &lt;br /&gt;&amp;#160; &amp;lt;customer&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;CustomerId&amp;gt;4&amp;lt;/CustomerId&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;LastName&amp;gt;Cotton&amp;lt;/LastName&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;FirstName&amp;gt;Rosie&amp;lt;/FirstName&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;LastUpdateDate&amp;gt;20090821&amp;lt;/LastUpdateDate&amp;gt;       &lt;br /&gt;&amp;#160; &amp;lt;/customer&amp;gt;       &lt;br /&gt;&amp;lt;/customers&amp;gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;If you have any choice on the type of text file to use for your application, an XML file is the best choice. XML has become the standard for defining data structures due to its simplicity, clarity, self-descriptiveness, and consistency. There are great tools for reading and writing XML files available in the .NET framework. Visual Basic has additional features, called XML literals, that make working with XML files a breeze. See &lt;a href="http://msmvps.com/blogs/deborahk/archive/tags/Xml/default.aspx" target="_blank"&gt;this link&lt;/a&gt; for other posting on working with XML files.&lt;/p&gt;  &lt;p&gt;Sometimes, however, you have no choice. You have to read a text file that is not in an XML structure. For example, you may need to read files generated by legacy systems or by other software. In that case, you need to use delimited or fixed length files.&lt;/p&gt;</description></item><item><title>Adding Nodes to an XML String</title><link>http://msmvps.com/blogs/deborahk/archive/2009/08/20/adding-nodes-to-an-xml-string.aspx</link><pubDate>Thu, 20 Aug 2009 05:00:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1716972</guid><dc:creator>DeborahK</dc:creator><description>&lt;p&gt;I have an XML string as follows:&lt;/p&gt;  &lt;p&gt;&amp;lt;States&amp;gt;   &lt;br /&gt;&amp;#160; &amp;lt;State name=&amp;quot;Wisconsin&amp;quot;&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Regions&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Region name=&amp;quot;Milwaukee&amp;quot;&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Area name=&amp;quot;Mukwanago&amp;quot;/&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Area name=&amp;quot;Germantown&amp;quot;/&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/Region&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Region name=&amp;quot;Fox Valley&amp;quot;&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Area name=&amp;quot;Oshkosh&amp;quot; /&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Area name=&amp;quot;Appleton&amp;quot; /&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/Region&amp;gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/Regions&amp;gt;    &lt;br /&gt;&amp;#160; &amp;lt;/State&amp;gt;    &lt;br /&gt;&amp;lt;/States&amp;gt;&lt;/p&gt;  &lt;p&gt;I now want to add another area under Milwaukee called &amp;quot;Wauwatosa&amp;quot;.&lt;/p&gt;  &lt;p&gt;The code to accomplish this task is as follows.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;In C#:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#65402e" face="Consolas"&gt; // Be sure to set a reference to System.Core and System.Xml.Linq     &lt;br /&gt; XElement states&amp;#160; = XElement.Load(&amp;quot;testXML.xml&amp;quot;); &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#65402e" face="Consolas"&gt; // New element under the Milwaukee region     &lt;br /&gt; XElement newElement&amp;#160; = XElement.Parse(@&amp;quot;&amp;lt;Area name=&amp;#39;Wauwatosa&amp;#39;/&amp;gt;&amp;quot;); &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#65402e" face="Consolas"&gt;// Find the desired parent element     &lt;br /&gt; // Using LINQ      &lt;br /&gt; XElement parentNode;      &lt;br /&gt; var parentQuery = from XElement r in states.Descendants(&amp;quot;Region&amp;quot;)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; where r.Attribute(&amp;quot;name&amp;quot;).Value == &amp;quot;Milwaukee&amp;quot;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; select r;      &lt;br /&gt; parentNode = parentQuery.FirstOrDefault(); &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#65402e" face="Consolas"&gt; // Using Lambda expression     &lt;br /&gt; parentNode = states.Descendants(&amp;quot;Region&amp;quot;).      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Where(r =&amp;gt; r.Attribute(&amp;quot;name&amp;quot;).Value ==       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#65402e" face="Consolas"&gt;&amp;quot;Milwaukee&amp;quot;).FirstOrDefault(); &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#65402e" face="Consolas"&gt; if (parentNode != null)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; parentNode.Add(newElement); &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#65402e" face="Consolas"&gt; states.Save(&amp;quot;Revised.xml&amp;quot;);&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;In VB:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#65402e" face="Consolas"&gt;&amp;#39; Be sure to set a reference to System.Core and System.Xml.Linq     &lt;br /&gt;Dim states As XElement = XElement.Load(&amp;quot;testXML.xml&amp;quot;) &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#65402e" face="Consolas"&gt;&amp;#39; New element under the Milwaukee region     &lt;br /&gt;Dim newElement As XElement = &amp;lt;Area name=&amp;quot;Wauwatosa&amp;quot;/&amp;gt; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#65402e" face="Consolas"&gt;&amp;#39; Find the desired parent element     &lt;br /&gt;&amp;#39; Using LINQ      &lt;br /&gt;Dim parentNode As XElement      &lt;br /&gt;Dim parentQuery = From r As XElement In states...&amp;lt;Region&amp;gt; _      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Where r.@&amp;lt;name&amp;gt; = &amp;quot;Milwaukee&amp;quot;      &lt;br /&gt;parentNode = parentQuery.FirstOrDefault() &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#65402e" face="Consolas"&gt;&amp;#39; Using Lambda expression     &lt;br /&gt;parentNode = states...&amp;lt;Region&amp;gt;.Where(Function(r) r.@&amp;lt;name&amp;gt; =&amp;#160; _      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#65402e" face="Consolas"&gt;&amp;quot;Milwaukee&amp;quot;).FirstOrDefault &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#65402e" face="Consolas"&gt;If (parentNode IsNot Nothing) Then     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; parentNode.Add(newElement)      &lt;br /&gt;End If &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#65402e" face="Consolas"&gt;states.Save(&amp;quot;Revised.xml&amp;quot;)&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;This code first loads in the XML file containing the XML at the top of this post. The code then defines the new element for Wauwatosa using XML literals in VB and the XElement properties and methods in C#.&lt;/p&gt;  &lt;p&gt;NOTE: The XElement Descendants property works in VB as well.&lt;/p&gt;  &lt;p&gt;The next set of code can be done using LINQ or using Lambda expressions. Use either one, but not both. :-)&lt;/p&gt;  &lt;p&gt;If the appropriate parent element was found, the new element is added to it. The &lt;strong&gt;Add&lt;/strong&gt; method adds the element as a child element.&lt;/p&gt;  &lt;p&gt;Finally, the code saves the revised XML:&lt;/p&gt;  &lt;p&gt;&amp;lt;States&amp;gt;   &lt;br /&gt;&amp;#160; &amp;lt;State name=&amp;quot;Wisconsin&amp;quot;&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Regions&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Region name=&amp;quot;Milwaukee&amp;quot;&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Area name=&amp;quot;Mukwanago&amp;quot; /&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Area name=&amp;quot;Germantown&amp;quot; /&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Area name=&amp;quot;Wauwatosa&amp;quot; /&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/Region&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Region name=&amp;quot;Fox Valley&amp;quot;&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Area name=&amp;quot;Oshkosh&amp;quot; /&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Area name=&amp;quot;Appleton&amp;quot; /&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/Region&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/Regions&amp;gt;    &lt;br /&gt;&amp;#160; &amp;lt;/State&amp;gt;    &lt;br /&gt;&amp;lt;/States&amp;gt;&lt;/p&gt;  &lt;p&gt;Enjoy!&lt;/p&gt;</description></item><item><title>Populating a TreeView Control from XML</title><link>http://msmvps.com/blogs/deborahk/archive/2009/07/21/populating-a-treeview-control-from-xml.aspx</link><pubDate>Tue, 21 Jul 2009 05:00:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1704756</guid><dc:creator>DeborahK</dc:creator><description>&lt;p&gt;This post describes how to populate a WinForms TreeView control from an XML file assuming you are targeting the .NET Framework Version 3.5.&lt;/p&gt;  &lt;p&gt;The XML file used in this example looks like this:&lt;/p&gt;  &lt;p&gt;&lt;font color="#65402e" face="Consolas"&gt;&amp;lt;States&amp;gt;     &lt;br /&gt;&amp;#160; &amp;lt;State name=&amp;quot;California&amp;quot;&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Regions&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Region name=&amp;quot;San Luis Obispo&amp;quot;&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Area name=&amp;quot;Santa Maria&amp;quot; /&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Area name=&amp;quot;Seaside&amp;quot; /&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/Region&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Region name=&amp;quot;Silicon Valley&amp;quot;&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Area name=&amp;quot;San Jose&amp;quot;/&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Area name=&amp;quot;Sunnyvale&amp;quot;/&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/Region&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/Regions&amp;gt;      &lt;br /&gt;&amp;#160; &amp;lt;/State&amp;gt;      &lt;br /&gt;&amp;#160; &amp;lt;State name=&amp;quot;Wisconsin&amp;quot;&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Regions&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Region name=&amp;quot;Milwaukee&amp;quot;&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Area name =&amp;quot;Mukwanago&amp;quot;/&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Area name=&amp;quot;Germantown&amp;quot;/&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/Region&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Region name=&amp;quot;Fox Valley&amp;quot;&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Area name=&amp;quot;Oshkosh&amp;quot; /&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Area name=&amp;quot;Appleton&amp;quot; /&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/Region&amp;gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/Regions&amp;gt;      &lt;br /&gt;&amp;#160; &amp;lt;/State&amp;gt;      &lt;br /&gt;&amp;lt;/States&amp;gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;The TreeView will display the following:&lt;/p&gt;  &lt;p&gt;State   &lt;br /&gt;--- Region    &lt;br /&gt;------ Area&lt;/p&gt;  &lt;p&gt;The code is provided here in VB and C# and then described in detail below.&lt;/p&gt;  &lt;p&gt;NOTE: Be sure to set a reference to &lt;strong&gt;System.Core&lt;/strong&gt; and &lt;strong&gt;System.Xml.Linq&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;In C#:&lt;/p&gt;  &lt;p&gt;&lt;font color="#65402e" face="Consolas"&gt;XElement doc&amp;#160; = XElement.Load(&amp;quot;testXML.xml&amp;quot;); &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#65402e" face="Consolas"&gt;TreeNode stateNode;     &lt;br /&gt;TreeNode regionNode;      &lt;br /&gt;foreach (XElement state&amp;#160; in doc.Descendants(&amp;quot;State&amp;quot;))      &lt;br /&gt;{      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; stateNode = treeView1.Nodes.Add(state.Attribute(&amp;quot;name&amp;quot;).Value);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; foreach (XElement region in state.Descendants(&amp;quot;Region&amp;quot;))      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; regionNode =       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; stateNode.Nodes.Add(region.Attribute(&amp;quot;name&amp;quot;).Value);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; foreach (XElement area in region.Descendants(&amp;quot;Area&amp;quot;))      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; regionNode.Nodes.Add(area.Attribute(&amp;quot;name&amp;quot;).Value);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;}&lt;/font&gt; &lt;/p&gt;  &lt;p&gt;In VB:&lt;/p&gt;  &lt;p&gt;&lt;font color="#65402e" face="Consolas"&gt;Dim doc As XElement = XElement.Load(&amp;quot;testXML.xml&amp;quot;) &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#65402e" face="Consolas"&gt;Dim stateNode As TreeNode     &lt;br /&gt;Dim regionNode As TreeNode      &lt;br /&gt;For Each state As XElement In doc...&amp;lt;State&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; stateNode = TreeView1.Nodes.Add(state.@name)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; For Each region As XElement In state...&amp;lt;Region&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; regionNode = stateNode.Nodes.Add(region.@name)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; For Each area As XElement In region...&amp;lt;Area&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; regionNode.Nodes.Add(area.@name)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Next      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Next      &lt;br /&gt;Next&lt;/font&gt; &lt;/p&gt;  &lt;p&gt;In both cases, the XML is first retrieved from a file. An in-memory XML string could be used instead.&lt;/p&gt;  &lt;p&gt;Three for/each loops are used, one for each level of the TreeView hierarchy.&lt;/p&gt;  &lt;p&gt;The states are processed first. A node is added for each state name.&lt;/p&gt;  &lt;p&gt;The regions are processed next. A node is added under the state for each region name.&lt;/p&gt;  &lt;p&gt;Finally, the areas are processed. A node is added under the region for each area name.&lt;/p&gt;  &lt;p&gt;Notice that the VB code leverages XML literals. The C# code uses XElements (which also work in VB).&lt;/p&gt;  &lt;p&gt;Enjoy!&lt;/p&gt;</description></item><item><title>Populating a TreeView Control from XML</title><link>http://msmvps.com/blogs/deborahk/archive/2009/07/21/populating-a-treeview-control-from-xml.aspx</link><pubDate>Tue, 21 Jul 2009 05:00:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1704756</guid><dc:creator>DeborahK</dc:creator><description>&lt;p&gt;This post describes how to populate a WinForms TreeView control from an XML file assuming you are targeting the .NET Framework Version 3.5.&lt;/p&gt;  &lt;p&gt;The XML file used in this example looks like this:&lt;/p&gt;  &lt;p&gt;&lt;font color="#65402e" face="Consolas"&gt;&amp;lt;States&amp;gt;     &lt;br /&gt;&amp;#160; &amp;lt;State name=&amp;quot;California&amp;quot;&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Regions&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Region name=&amp;quot;San Luis Obispo&amp;quot;&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Area name=&amp;quot;Santa Maria&amp;quot; /&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Area name=&amp;quot;Seaside&amp;quot; /&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/Region&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Region name=&amp;quot;Silicon Valley&amp;quot;&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Area name=&amp;quot;San Jose&amp;quot;/&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Area name=&amp;quot;Sunnyvale&amp;quot;/&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/Region&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/Regions&amp;gt;      &lt;br /&gt;&amp;#160; &amp;lt;/State&amp;gt;      &lt;br /&gt;&amp;#160; &amp;lt;State name=&amp;quot;Wisconsin&amp;quot;&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Regions&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Region name=&amp;quot;Milwaukee&amp;quot;&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Area name =&amp;quot;Mukwanago&amp;quot;/&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Area name=&amp;quot;Germantown&amp;quot;/&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/Region&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Region name=&amp;quot;Fox Valley&amp;quot;&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Area name=&amp;quot;Oshkosh&amp;quot; /&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Area name=&amp;quot;Appleton&amp;quot; /&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/Region&amp;gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/Regions&amp;gt;      &lt;br /&gt;&amp;#160; &amp;lt;/State&amp;gt;      &lt;br /&gt;&amp;lt;/States&amp;gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;The TreeView will display the following:&lt;/p&gt;  &lt;p&gt;State   &lt;br /&gt;--- Region    &lt;br /&gt;------ Area&lt;/p&gt;  &lt;p&gt;The code is provided here in VB and C# and then described in detail below.&lt;/p&gt;  &lt;p&gt;NOTE: Be sure to set a reference to &lt;strong&gt;System.Core&lt;/strong&gt; and &lt;strong&gt;System.Xml.Linq&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;In C#:&lt;/p&gt;  &lt;p&gt;&lt;font color="#65402e" face="Consolas"&gt;XElement doc&amp;#160; = XElement.Load(&amp;quot;testXML.xml&amp;quot;); &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#65402e" face="Consolas"&gt;TreeNode stateNode;     &lt;br /&gt;TreeNode regionNode;      &lt;br /&gt;foreach (XElement state&amp;#160; in doc.Descendants(&amp;quot;State&amp;quot;))      &lt;br /&gt;{      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; stateNode = treeView1.Nodes.Add(state.Attribute(&amp;quot;name&amp;quot;).Value);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; foreach (XElement region in state.Descendants(&amp;quot;Region&amp;quot;))      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; regionNode =       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; stateNode.Nodes.Add(region.Attribute(&amp;quot;name&amp;quot;).Value);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; foreach (XElement area in region.Descendants(&amp;quot;Area&amp;quot;))      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; regionNode.Nodes.Add(area.Attribute(&amp;quot;name&amp;quot;).Value);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;}&lt;/font&gt; &lt;/p&gt;  &lt;p&gt;In VB:&lt;/p&gt;  &lt;p&gt;&lt;font color="#65402e" face="Consolas"&gt;Dim doc As XElement = XElement.Load(&amp;quot;testXML.xml&amp;quot;) &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#65402e" face="Consolas"&gt;Dim stateNode As TreeNode     &lt;br /&gt;Dim regionNode As TreeNode      &lt;br /&gt;For Each state As XElement In doc...&amp;lt;State&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; stateNode = TreeView1.Nodes.Add(state.@name)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; For Each region As XElement In state...&amp;lt;Region&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; regionNode = stateNode.Nodes.Add(region.@name)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; For Each area As XElement In region...&amp;lt;Area&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; regionNode.Nodes.Add(area.@name)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Next      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Next      &lt;br /&gt;Next&lt;/font&gt; &lt;/p&gt;  &lt;p&gt;In both cases, the XML is first retrieved from a file. An in-memory XML string could be used instead.&lt;/p&gt;  &lt;p&gt;Three for/each loops are used, one for each level of the TreeView hierarchy.&lt;/p&gt;  &lt;p&gt;The states are processed first. A node is added for each state name.&lt;/p&gt;  &lt;p&gt;The regions are processed next. A node is added under the state for each region name.&lt;/p&gt;  &lt;p&gt;Finally, the areas are processed. A node is added under the region for each area name.&lt;/p&gt;  &lt;p&gt;Notice that the VB code leverages XML literals. The C# code uses XElements (which also work in VB).&lt;/p&gt;  &lt;p&gt;Enjoy!&lt;/p&gt;</description></item><item><title>XML Literals: Reading an XML File</title><link>http://msmvps.com/blogs/deborahk/archive/2009/07/08/xml-literals-reading-an-xml-file.aspx</link><pubDate>Wed, 08 Jul 2009 05:00:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1698830</guid><dc:creator>DeborahK</dc:creator><description>&lt;p&gt;In a prior post &lt;a href="http://msmvps.com/blogs/deborahk/archive/2009/07/02/xml-literals-creating-an-xml-file.aspx" target="_blank"&gt;here&lt;/a&gt;, I created an XML file using VB 9 (Visual Basic 2008/.NET Framework 3.5). This post demonstrates how to read that file and reconstitute the list of customers.&lt;/p&gt;  &lt;p&gt;This code reads the XML into an XElement:&lt;/p&gt;  &lt;p&gt;&lt;font color="#65402e" face="Consolas"&gt;Dim customerXml As XElement = XElement.Load(&amp;quot;customers.xml&amp;quot;) &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;This code processes the XML and rebuilds the list of customers:&lt;/p&gt;  &lt;p&gt;&lt;font color="#65402e" face="Consolas"&gt;&amp;#39; Repopulate the business objects      &lt;br /&gt;Dim customerList as New List(Of Customer)       &lt;br /&gt;For Each c As XElement In customerXml...&amp;lt;customer&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; customerList.Add(New Customer With _       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#65402e" face="Consolas"&gt;{.LastName = c.&amp;lt;LastName&amp;gt;.Value, _      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; .FirstName = c.&amp;lt;FirstName&amp;gt;.Value})       &lt;br /&gt;Next&lt;/font&gt; &lt;/p&gt;  &lt;p&gt;The first line of code defines the list that will contain the set of customer objects. The For/Each loop processes each &amp;lt;customer&amp;gt; element. For each element, a new Customer is created using the new object initializer feature in VB 9. The &amp;lt;LastName&amp;gt; and &amp;lt;FirstName&amp;gt; XML elements are read into the LastName and FirstName properties of the new customer. The new customer is then added to the list.&lt;/p&gt;  &lt;p&gt;If all goes well, you should end up with the same list that we started with &lt;a href="http://msmvps.com/blogs/deborahk/archive/2009/07/03/generics-building-a-list-of-customers.aspx"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;This is almost &lt;em&gt;too&lt;/em&gt; easy! :-)&lt;/p&gt;  &lt;p&gt;Enjoy!&lt;/p&gt;</description></item><item><title>XML Literals: Simplifying Strings</title><link>http://msmvps.com/blogs/deborahk/archive/2009/07/03/xml-literals-simplifying-strings.aspx</link><pubDate>Fri, 03 Jul 2009 05:00:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1697738</guid><dc:creator>DeborahK</dc:creator><description>&lt;p&gt;You have probably heard that the next version of VB will no longer require line continuation characters in most situations. This is very good news for those of us that do not like typing underscore characters.&lt;/p&gt;  &lt;p&gt;But in the mean time, what do we do if we have a long string, like a SQL string:&lt;/p&gt;  &lt;p&gt;&lt;font color="#65402e" face="Consolas"&gt;Dim mySelect As String = &amp;quot;Select CustomerId, &amp;quot; &amp;amp; _      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;quot;LastName, &amp;quot; &amp;amp; _       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;quot;FirstName, &amp;quot; &amp;amp; _       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;quot;EmailAddress &amp;quot; &amp;amp; _       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;quot;From Customer &amp;quot; &amp;amp; _       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;quot;Where CustomerId = @CustomerID&amp;quot;&lt;/font&gt; &lt;/p&gt;  &lt;p&gt;&lt;font color="#65402e" face="Consolas"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;And this one is only selecting three fields!&lt;/p&gt;  &lt;p&gt;XML Literals can help:&lt;/p&gt;  &lt;p&gt;&lt;font color="#65402e" face="Consolas"&gt;Dim mySelect2 As XElement = &amp;lt;string&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Select CustomerId,       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LastName,       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; FirstName,       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; EmailAddress       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; From Customer       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Where CustomerId = @CustomerId       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/string&amp;gt;&lt;/font&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Notice in the XML literals example that there are no quotes, ampersands (&amp;amp;) or underscores (_). That can save a lot of typing and it is easier to read.&lt;/p&gt;  &lt;p&gt;Since mySelect2 is an XElement, use the Value property to get the string from the element.&lt;/p&gt;  &lt;p&gt;&lt;font color="#65402e" face="Consolas"&gt;mySelect2.Value&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Enjoy!&lt;/p&gt;</description></item><item><title>XML Literals: Creating an XML File</title><link>http://msmvps.com/blogs/deborahk/archive/2009/07/02/xml-literals-creating-an-xml-file.aspx</link><pubDate>Thu, 02 Jul 2009 05:00:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1697623</guid><dc:creator>DeborahK</dc:creator><description>&lt;p&gt;One of my favorite features in VB 9 (Visual Studio 2008) is XML Literals. This example demonstrates how insanely easy it is to build an XML file using VB.&lt;/p&gt;  &lt;p&gt;This code builds XML from a list of customers.&lt;/p&gt;  &lt;p&gt;&lt;font color="#65402e" face="Consolas"&gt;Dim customerXml As XElement = _      &lt;br /&gt;&lt;/font&gt;&lt;font color="#65402e" face="Consolas"&gt;&amp;lt;customers&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;%= From c In custList _       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Select &amp;lt;customer&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;LastName&amp;gt;&amp;lt;%= c.LastName %&amp;gt;&amp;lt;/LastName&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;FirstName&amp;gt;&amp;lt;%= c.FirstName %&amp;gt;&amp;lt;/FirstName&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/customer&amp;gt; %&amp;gt;       &lt;br /&gt;&amp;lt;/customers&amp;gt;       &lt;br /&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;This code starts with the customers root node. It then builds a customer node for each customer found in the list.&lt;/p&gt;  &lt;p&gt;This code then saves the XML to the defined file:&lt;/p&gt;  &lt;p&gt;customerXml.Save(&amp;quot;customers.xml&amp;quot;)&lt;/p&gt;  &lt;p&gt;NOTE: The definition of the Customer class and the list of customers (custList) used in the above example can be found &lt;a href="http://msmvps.com/blogs/deborahk/archive/2009/07/03/generics-building-a-list-of-customers.aspx"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;The resulting XML:&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas"&gt;&amp;lt;customers&amp;gt;      &lt;br /&gt;&amp;#160; &amp;lt;customer&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;LastName&amp;gt;Baggins&amp;lt;/LastName&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;FirstName&amp;gt;Billbo&amp;lt;/FirstName&amp;gt;       &lt;br /&gt;&amp;#160; &amp;lt;/customer&amp;gt;       &lt;br /&gt;&amp;#160; &amp;lt;customer&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;LastName&amp;gt;Baggins&amp;lt;/LastName&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;FirstName&amp;gt;Frodo&amp;lt;/FirstName&amp;gt;       &lt;br /&gt;&amp;#160; &amp;lt;/customer&amp;gt;       &lt;br /&gt;&amp;#160; &amp;lt;customer&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;LastName&amp;gt;Kurata&amp;lt;/LastName&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;FirstName&amp;gt;Deborah&amp;lt;/FirstName&amp;gt;       &lt;br /&gt;&amp;#160; &amp;lt;/customer&amp;gt;       &lt;br /&gt;&amp;lt;/customers&amp;gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Enjoy!&lt;/p&gt;  &lt;p&gt;P.S. In a later post &lt;a href="http://msmvps.com/blogs/deborahk/archive/2009/07/08/xml-literals-reading-an-xml-file.aspx" target="_blank"&gt;here&lt;/a&gt;, I show how to read this XML file and reconstitute the list of customers.&lt;/p&gt;</description></item></channel></rss>