十一月 24

有寫過C#的朋友大概都知道,要在C#中輸入一段有斷行的字串或SQL時

都會使用「@」這個好用的符號。好處就是可以直接斷行

例如:
string test = @"
select * from tb
where c1 = 123″

但是在VB.NET就要很鱉腳用 「 & _ 」來斷行
例如:
dim test as string
test = “select * from tb" & _
“where c1 = 123″

如果行數一多,那可真是累死人不償命又無聊的工程
某天在黑暗執行緒的某一篇文章挖到了寶

使用VB.NET 2008內建的XML嵌入語法,來達成模擬C#的「@」
直接看下面的例子

        Dim JS As String = <s><![CDATA[
                <script type="text/javascript">
                jQuery(function ($) {
                    $('#@txtbox.ClientID@').datepicker({
                    rangeSelect: true,
                    firstDay: 1,
                    changeMonth: true,
                    changeYear: true,
                    showOn: 'both',
                    buttonImageOnly: true,
                    buttonImage: '@Context.Request.ApplicationPath@/Picture/calendar.gif'
                    });
                });
                </script>
        ]]></s>.Value.Replace(vbLf, vbCrLf)

跟據Ark網友的補充,由於預設的換行是vbLf,所以後面我加了Replace(vbLf, vbCrLf)
來把換行符號變成vbCrLf

那如果字串裡面有變數怎麼辦?
先把變數用@包起來,例如:@txtbox.ClientID@
之後再用Replace去把變數塞進去,例如:JS = JS.Replace(“@txtbox.ClientID@", “AAAA")

看來一切都很完美了,不過還沒結束
當你在VS2010上使用時你會發現字串內的文字是接近白色的
這對老人家的眼力是很大的考驗
20101124_1

這時候可以進去選項裡面調整

20101124_2

選擇字型與色形,再挑選VB XML CData 區段,調整你想要顏色,按下確定

20101124_3

收工

20101124_4





三月 15

XDocument是Linq所提供的一個關於XML的類別
但有的時候我們所使用的方法要求傳入的是XmlDocument
但是在傳入之前,我們想要針對這個XML檔案做一些處理後,再傳進去
這時候就可以利用XDocument,經由Linq處理後,再轉成XmlDocument丟進去
註:用了Linq to XML,終於可以離開之前寫XML相關處理的惡夢,Linq真是個好東西

話不多說了,直接來看程式吧

using System.Xml.Linq;
XDocument XDoc = XDocument.Load(Log4NetConfigXMLFilePath);
var nodes = (from p in XDoc.Elements(&quot;log4net&quot;)
                  .Elements(&quot;appender&quot;)
                  .Elements(&quot;file&quot;)
             elect p).FirstOrDefault();
//使用Linq Select出來後,進行處理
nodes.SetAttributeValue(&quot;value&quot;,HttpContext.Current.Server.MapPath(&quot;~/&quot;) + 
                                 nodes.Attribute(&quot;value&quot;).Value);
//轉出來後再放到XmlDocument
System.Xml.XmlDocument XmlDoc = new System.Xml.XmlDocument();
//把XDocument轉成XmlDocument
XmlDoc.LoadXml(XDoc.Document.ToString());