2010-10-30 6 views
0

Dans mon programme, j'ai une chaîne qui contient des URL séparées par/n (un par ligne)Comment faire pour générer un rapport HTML d'une chaîne d'URL

Disons que la chaîne est appelée « liens ». Je veux prendre cette chaîne et générer un fichier HTML qui s'ouvrira automatiquement dans mon navigateur par défaut, ce qui fera de chaque URL un lien hypertexte (un par ligne). Comment est-ce que je ferais un tel rapport n'utilisant pas de composants tiers utilisant WPF C# 4.0? Je veux que le rapport soit généré en cliquant sur un bouton appelé "Export".

Répondre

2

Il existe de nombreuses façons de le faire, mais voici un exemple rapide et sale (le débogage peut être nécessaire depuis que j'ai écrit ceci à la volée). [Modifier : Maintenant utilise des objets Uri pour formuler l'adresse réelle.]

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); 
     } 
    } 

Le bouton 'Export' est relié à l'événement 'export_Click'. J'ai codé en dur la chaîne avec '\ n' pour l'exemple. Il suffit de les séparer en utilisant split et d'écrire un fichier temporaire en créant le code HTML dont vous avez besoin. Ensuite, une fois le fichier terminé, vous pouvez l'ouvrir en utilisant la méthode Process.Start().

Idéalement, cela peut être fait en utilisant DataBinding et d'autres éléments disponibles dans WPF si la nécessité d'ouvrir une fenêtre de navigateur n'était pas requise. Cela supprimerait également toutes les dépendances externes que le programme peut avoir.

+0

Merci! Cela a fonctionné parfaitement! Une dernière question. Quel serait le code à ajouter pour supprimer certaines données répétitives des URL. Par exemple, si j'ai '+ sales + degree' dans le cadre de la fin de certaines URL, mais je veux supprimer seulement cette chaîne? – Jason

+0

Code modifié pour refléter votre question. Je suis allé de l'avant et j'ai supposé que vous aviez la chaîne entière comme l'exemple afin de créer un objet Uri serait assez sûr. –

Questions connexes