<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://weblogs.asp.net/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>IBlog&amp;lt;Johan&amp;gt; : XML</title><link>http://weblogs.asp.net/jdanforth/archive/tags/XML/default.aspx</link><description>Tags: XML</description><dc:language>en</dc:language><generator>CommunityServer 2007 SP1 (Build: 20510.895)</generator><item><title>LINQ to XML in VB.NET and Using the Right Language for the Job</title><link>http://weblogs.asp.net/jdanforth/archive/2008/10/15/linq-to-xml-in-vb-net-and-using-the-right-language-for-the-job.aspx</link><pubDate>Wed, 15 Oct 2008 11:17:50 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6682010</guid><dc:creator>jdanforth</dc:creator><author>jdanforth</author><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/jdanforth/rsscomments.aspx?PostID=6682010</wfw:commentRss><comments>http://weblogs.asp.net/jdanforth/archive/2008/10/15/linq-to-xml-in-vb-net-and-using-the-right-language-for-the-job.aspx#comments</comments><description>&lt;p&gt;I'm almost always using C# in my .NET projects, unless I'm doing Office automation where the VB-way of dealing with optional parameters helps out making the code a bit cleaner. &lt;/p&gt;  &lt;p&gt;The last week we've been upgrading ASMX-clients to become WCF-clients for a number of old .NET 1.1 and 2.0 projects, and we ended up with a bunch of app.config files with loads and loads of WCF client endpoint sections, each of them pointing at their own binding configuration. To manually clean this up would take hours and hours of tedious work which would probably result in more than a few errors.&lt;/p&gt;  &lt;p&gt;So I thought maybe I could do search/replace with a regexp-capable editor... or try out XML Literals in VB.NET. I wanted to remove old behaviors, extensions and bindings, then add my own behaviors and extensions and finally change some attributes on each client endpoint. Doing this with XML Literals and XDocument/XElement in VB.NET was quite straight forward and didn't result in too many lines of code:&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="color: rgb(0,0,255)"&gt;Imports&lt;/span&gt; System
&lt;span style="color: rgb(0,0,255)"&gt;Imports&lt;/span&gt; System.Xml.Linq
&lt;span style="color: rgb(0,0,255)"&gt;Imports&lt;/span&gt; System.IO
&lt;span style="color: rgb(0,0,255)"&gt;Imports&lt;/span&gt; System.Linq&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;pre class="code"&gt;    &lt;span style="color: rgb(0,0,255)"&gt;Sub&lt;/span&gt; FixupConfig(&lt;span style="color: rgb(0,0,255)"&gt;ByVal&lt;/span&gt; infile &lt;span style="color: rgb(0,0,255)"&gt;As&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;String&lt;/span&gt;, &lt;span style="color: rgb(0,0,255)"&gt;ByVal&lt;/span&gt; outfile &lt;span style="color: rgb(0,0,255)"&gt;As&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;String&lt;/span&gt;)
        &lt;span style="color: rgb(0,0,255)"&gt;Dim&lt;/span&gt; defaultBindingConfigurationXml = &lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(132,70,70)"&gt;binding&lt;/span&gt; &lt;span style="color: rgb(185,100,100)"&gt;name&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;=&lt;/span&gt;&lt;span style="color: rgb(85,85,85)"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;defaultBindingConfiguration&lt;/span&gt;&lt;span style="color: rgb(85,85,85)"&gt;&amp;quot;
&lt;/span&gt;                                              &lt;span style="color: rgb(185,100,100)"&gt;maxBufferSize&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;=&lt;/span&gt;&lt;span style="color: rgb(85,85,85)"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;1065536&lt;/span&gt;&lt;span style="color: rgb(85,85,85)"&gt;&amp;quot;
&lt;/span&gt;                                              &lt;span style="color: rgb(185,100,100)"&gt;maxBufferPoolSize&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;=&lt;/span&gt;&lt;span style="color: rgb(85,85,85)"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;524288&lt;/span&gt;&lt;span style="color: rgb(85,85,85)"&gt;&amp;quot;
&lt;/span&gt;                                              &lt;span style="color: rgb(185,100,100)"&gt;maxReceivedMessageSize&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;=&lt;/span&gt;&lt;span style="color: rgb(85,85,85)"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;1065536&lt;/span&gt;&lt;span style="color: rgb(85,85,85)"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;/&amp;gt;

&lt;/span&gt;        &lt;span style="color: rgb(0,0,255)"&gt;Dim&lt;/span&gt; behaviorsXml = &lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(132,70,70)"&gt;behaviors&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;
&lt;/span&gt;                               &lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(132,70,70)"&gt;endpointBehaviors&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;
&lt;/span&gt;                                   &lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(132,70,70)"&gt;behavior&lt;/span&gt; &lt;span style="color: rgb(185,100,100)"&gt;name&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;=&lt;/span&gt;&lt;span style="color: rgb(85,85,85)"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;FacadeSoapEndpointBehavior&lt;/span&gt;&lt;span style="color: rgb(85,85,85)"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;
&lt;/span&gt;                                       &lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(132,70,70)"&gt;SetMaxFaultSizeBehavior&lt;/span&gt; &lt;span style="color: rgb(185,100,100)"&gt;size&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;=&lt;/span&gt;&lt;span style="color: rgb(85,85,85)"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;100000&lt;/span&gt;&lt;span style="color: rgb(85,85,85)"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;/&amp;gt;
&lt;/span&gt;                                       &lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(132,70,70)"&gt;ClientExceptionHandlerBehavior&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;/&amp;gt;
&lt;/span&gt;                                   &lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(132,70,70)"&gt;behavior&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;
&lt;/span&gt;                               &lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(132,70,70)"&gt;endpointBehaviors&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;
&lt;/span&gt;                           &lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(132,70,70)"&gt;behaviors&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;

&lt;/span&gt;        &lt;span style="color: rgb(0,0,255)"&gt;Dim&lt;/span&gt; extensionsXml = &lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(132,70,70)"&gt;extensions&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;
&lt;/span&gt;                                &lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(132,70,70)"&gt;behaviorExtensions&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;
&lt;/span&gt;                                    &lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(132,70,70)"&gt;add&lt;/span&gt; &lt;span style="color: rgb(185,100,100)"&gt;name&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;=&lt;/span&gt;&lt;span style="color: rgb(85,85,85)"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;SetMaxFaultSizeBehavior&lt;/span&gt;&lt;span style="color: rgb(85,85,85)"&gt;&amp;quot;&lt;/span&gt; &lt;br /&gt;&lt;span style="color: rgb(185,100,100)"&gt;type&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;=&lt;/span&gt;&lt;span style="color: rgb(85,85,85)"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;SomeType.SetMaxFaultSizeBehavior, SomeAssembly, Version=1.0.0.0, &lt;br /&gt;Culture=neutral, PublicKeyToken=null&lt;/span&gt;&lt;span style="color: rgb(85,85,85)"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;/&amp;gt;
&lt;/span&gt;                                    &lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(132,70,70)"&gt;add&lt;/span&gt; &lt;span style="color: rgb(185,100,100)"&gt;name&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;=&lt;/span&gt;&lt;span style="color: rgb(85,85,85)"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;ClientExceptionHandlerBehavior&lt;/span&gt;&lt;span style="color: rgb(85,85,85)"&gt;&amp;quot;&lt;/span&gt; &lt;br /&gt;&lt;span style="color: rgb(185,100,100)"&gt;type&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;=&lt;/span&gt;&lt;span style="color: rgb(85,85,85)"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;&lt;span style="color: rgb(100,100,185)"&gt;SomeType.&lt;/span&gt;ClientExceptionHandler, SomeAssembly, Version=1.0.0.0, &lt;br /&gt;Culture=neutral, PublicKeyToken=null&lt;/span&gt;&lt;span style="color: rgb(85,85,85)"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;/&amp;gt;
&lt;/span&gt;                                &lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(132,70,70)"&gt;behaviorExtensions&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;
&lt;/span&gt;                            &lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(132,70,70)"&gt;extensions&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;


&lt;/span&gt;        &lt;span style="color: rgb(0,0,255)"&gt;Dim&lt;/span&gt; xdoc = XDocument.Load(infile)

        xdoc...&lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;system.serviceModel&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;&lt;/span&gt;.&lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;behaviors&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;&lt;/span&gt;.Remove()
        xdoc...&lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;system.serviceModel&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;&lt;/span&gt;.&lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;extensions&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;&lt;/span&gt;.Remove()

        xdoc...&lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;system.serviceModel&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;&lt;/span&gt;.Single().AddFirst(extensionsXml)
        xdoc...&lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;system.serviceModel&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;&lt;/span&gt;.Single().AddFirst(behaviorsXml)

        xdoc...&lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;system.serviceModel&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;&lt;/span&gt;.&lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;bindings&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;&lt;/span&gt;.&lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;basicHttpBinding&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;&lt;/span&gt;.Descendants.Remove()
        xdoc...&lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;system.serviceModel&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;&lt;/span&gt;.&lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;bindings&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;&lt;/span&gt;.&lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;basicHttpBinding&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;&lt;/span&gt;.Single().Add(defaultBindingConfigurationXml)

        &lt;span style="color: rgb(0,0,255)"&gt;Dim&lt;/span&gt; elems = xdoc...&lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;client&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;&lt;/span&gt;.&lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;endpoint&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;
&lt;/span&gt;        &lt;span style="color: rgb(0,0,255)"&gt;For&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;Each&lt;/span&gt; element &lt;span style="color: rgb(0,0,255)"&gt;In&lt;/span&gt; elems
            element.&lt;span style="color: rgb(100,100,185)"&gt;@&lt;/span&gt;bindingConfiguration = &lt;span style="color: rgb(163,21,21)"&gt;&amp;quot;defaultBindingConfiguration&amp;quot;
&lt;/span&gt;            element.&lt;span style="color: rgb(100,100,185)"&gt;@&lt;/span&gt;behaviorConfiguration = &lt;span style="color: rgb(163,21,21)"&gt;&amp;quot;FacadeSoapEndpointBehavior&amp;quot;
&lt;/span&gt;        &lt;span style="color: rgb(0,0,255)"&gt;Next

&lt;/span&gt;        xdoc.Save(outfile)

    &lt;span style="color: rgb(0,0,255)"&gt;End&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;Sub
&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;I've heard people recommend to use VB.NET when dealing with XML and I agree - use the right language for the job. When doing this - remember to import System.Linq or you'll miss some vital extensions like the .Add() and .Single() methods ;)&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6682010" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/jdanforth/archive/tags/.NET+3.5/default.aspx">.NET 3.5</category><category domain="http://weblogs.asp.net/jdanforth/archive/tags/XML/default.aspx">XML</category><category domain="http://weblogs.asp.net/jdanforth/archive/tags/LINQ/default.aspx">LINQ</category></item></channel></rss>