2010-10-30 55 views
0

在我的程序的HTML報告我有一個包含/ N(每行一個)如何從一個字符串的URL

分離網址:假設字符串被稱爲「鏈接」的字符串。我想採用這個字符串並生成一個HTML文件,該文件將在默認瀏覽器中自動打開,這會使每個URL成爲一個超鏈接(每行一個)。我如何使用WPF C#4.0不使用任何第三方組件來製作這樣的報告?我想通過點擊一個名爲「導出」的按鈕來生成報告。

回答

2

有很多方法可以做到這一點,但這裏是一個快速和骯髒的例子(調試可能是必要的,因爲我寫了這對飛)。 [編輯:現在使用的Uri對象制定的實際地址]

private void export_Click(object sender, RoutedEventArgs e) 
    { 
     string tempFileName = "list.html"; 
     string links = "http://www.google.com/#sclient=psy&hl=en&site=&source=hp&q=test+me&aq=f&aqi=&aql=&oq=&gs_rfai=&pbx=1&fp=ddfbf15c2e2f4021\nhttp://www.testme.com/Test-Prep.html?afdt=Q3RzePF0jU8KEwja-5WM7PqkAhUUiZ0KHaoG_wcYASAAMJbwoAM4MEC4w6uX7dS53gdQlvCgA1CEra8PUJzr_xNQg73wFVCKttweUJStzNoBUNv67ZsD"; 
     List<Uri> uriCollection = new List<Uri>(); 

     foreach (string url in links.Split(new char[] { '\n' }, StringSplitOptions.RemoveEmptyEntries)) 
     { 
      uriCollection.Add(new Uri(url)); 
     } 

     // Create temporary file. 
     using (TextWriter writer = new StreamWriter(tempFileName)) 
     { 
      try 
      { 
       writer.WriteLine("<html>"); 
       writer.WriteLine("<head><title>Links</title></head>"); 
       writer.WriteLine("<body>"); 

       writer.WriteLine("<p>"); 

       foreach (Uri uri in uriCollection) 
       { 
        writer.WriteLine("<a href=\"{0}\">{1}</a><br />", uri.OriginalString, uri.Host); 
       } 

       writer.WriteLine("</p>"); 

       writer.WriteLine("</body>"); 
       writer.WriteLine("</html>"); 
      } 
      catch (Exception ex) 
      { 
       System.Diagnostics.Trace.TraceError(ex.Message); 
      } 
      finally 
      { 
       writer.Close(); 
      } 
     } 

     // Open browser with temporary file. 
     if (File.Exists(tempFileName)) 
     { 
      System.Diagnostics.Process.Start(tempFileName); 
     } 
    } 

「導出」按鈕連接到事件「export_Click」。例如,我用'\ n'對字符串進行了硬編碼。只需使用拆分將這些分開,然後編寫一個臨時文件來創建您需要的HTML。然後,一旦文件完成,您可以使用Process.Start()方法打開它。

理想的情況下這可以通過使用數據綁定和WPF中可用的其它元素如果沒有需要打開一個瀏覽器窗口的需要來完成。這也將消除程序可能具有的任何外部依賴性。

+0

謝謝!這工作完美!最後一個問題。要從網址中刪除一些重複數據,將添加什麼代碼?例如,如果我將「+ sales + degree」作爲結尾部分網址的一部分,但我想只刪除該字符串? – Jason 2010-10-30 13:07:23

+0

已編輯的代碼來反映您的問題。我繼續前進,假設你有像示例一樣的整個字符串,所以創建一個Uri對象將是相當安全的。 – 2010-10-30 15:09:09