Mega Code Archive

 
Categories / C# / XML
 

Convert a stream of text lines separated with newline sequences into an XML build result

//CruiseControl is open source software and is developed and maintained by a group of dedicated volunteers.  //CruiseControl is distributed under a BSD-style license. //http://cruisecontrol.sourceforge.net/ using System; using System.Collections; using System.Collections.Generic; using System.IO; using System.Text; using System.Text.RegularExpressions; namespace ThoughtWorks.CruiseControl.Core.Util {     /// <summary>     /// Class with handy stirng routines     /// </summary>     public class StringUtil     {         /// <summary>         /// Convert a stream of text lines separated with newline sequences into an XML build result.         /// </summary>         /// <param name="input">the text stream</param>         /// <param name="msgLevel">the message level, if any.  Values are "Error" and "Warning".</param>         /// <returns>the build result string</returns>         /// <remarks>If there are any non-blank lines in the input, they are each wrapped in a         /// <code>&lt;message&gt;</code> element and the entire set is wrapped in a         /// <code>&lt;buildresults&gt;</code> element and returned.  Each line of the input is encoded         /// as XML CDATA rules require.  If the input is empty or contains only whitspace, an          /// empty string is returned.         /// Note: If we can't manage to understand the input, we just return it unchanged.         /// </remarks>         public static string MakeBuildResult(string input, string msgLevel)         {             StringBuilder sb = new StringBuilder();             // Pattern for capturing a line of text, exclusive of the line-ending sequence.             // A "line" is an non-empty unbounded sequence of characters followed by some              // kind of line-ending sequence (CR, LF, or any combination thereof) or              // end-of-string.             Regex linePattern = new Regex(@"([^\r\n]+)");             MatchCollection lines = linePattern.Matches(input);             if (lines.Count > 0)             {                 sb.Append(Environment.NewLine);                 sb.Append("<buildresults>");                 sb.Append(Environment.NewLine);                 foreach (Match line in lines)                 {                     sb.Append("  <message");                     if (msgLevel != string.Empty)                         sb.AppendFormat(" level=\"{0}\"", msgLevel);                     sb.Append(">");                     sb.Append(line.ToString());                     sb.Append("</message>");                     sb.Append(Environment.NewLine);                 }                 sb.Append("</buildresults>");                 sb.Append(Environment.NewLine);             }             else                 sb.Append(input); // All of that stuff failed, just return our input             return sb.ToString();         }    } }