Mega Code Archive

 
Categories / C# / XML
 

Remove empty tags in the Xml string

#region License and Copyright /*  * Dotnet Commons Xml  *  *  * This library is free software; you can redistribute it and/or modify it   * under the terms of the GNU Lesser General Public License as published by   * the Free Software Foundation; either version 2.1 of the License, or   * (at your option) any later version.  *  * This library is distributed in the hope that it will be useful, but   * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY   * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License   * for more details.   *  * You should have received a copy of the GNU Lesser General Public License   * along with this library; if not, write to the   * Free Software Foundation, Inc.,   * 59 Temple Place,   * Suite 330,   * Boston,   * MA 02111-1307   * USA   *   */ #endregion using System; using System.Collections; using System.Collections.Specialized; using System.Diagnostics; using System.IO; using System.Reflection; using System.Text; using System.Text.RegularExpressions; using System.Xml; using System.Xml.Xsl; using System.Xml.Serialization; //using Dotnet.Commons.Reflection; namespace Dotnet.Commons.Xml {      ///     /// <summary>   /// This utility class contains wrapper functions that help to ease the handling and      /// manipulation of Xml documents, such as adding an element, adding an attribute     /// to an element, copying and cloning of nodes, etc.   ///   /// </summary>   ///         public abstract class XmlUtils   {     /// -----------------------------------------------------------     /// <summary>     /// Remove empty tags in the Xml string     /// </summary>     /// <param name="sXML"></param>     /// <returns></returns>     /// <remarks>Thanks to http://dotnet.editme.com/codeCleanXML</remarks>     /// -----------------------------------------------------------     public static string RemoveEmptyTags(string sXML)     {       System.Text.StringBuilder sb = new StringBuilder();                       sb.Append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");       sb.Append("<xsl:stylesheet ");       sb.Append("     version=\"1.0\" ");       sb.Append("     xmlns:msxsl=\"urn:schemas-microsoft-com:xslt\"");       sb.Append("     xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">");       sb.Append("     <xsl:output method=\"xml\" version=\"1.0\" encoding=\"UTF-8\"/>");       sb.Append("   <!-- Whenever you match any node or any attribute -->");       sb.Append("   <xsl:template match=\"node()|@*\">");       sb.Append("      <!-- Copy the current node -->");       sb.Append("     <xsl:if test=\"normalize-space(.) != '' or normalize-space(./@*) != '' \">");       sb.Append("          <xsl:copy>");       sb.Append("              <!-- Including any attributes it has and any child nodes -->");       sb.Append("               <xsl:apply-templates select=\"@*|node()\"/>");       sb.Append("          </xsl:copy>");       sb.Append("     </xsl:if>");       sb.Append("   </xsl:template>");       sb.Append("</xsl:stylesheet>");       return transXMLStringThroughXSLTString(sXML, sb.ToString());     }         private static string transXMLStringThroughXSLTString(string sXML, string sXSLT)     {             //This is the logic of the application.             XslCompiledTransform objTransform = new XslCompiledTransform();             StringReader xmlStream = new StringReader(sXML);             XmlReader xmlReader = new XmlTextReader(xmlStream);             StringReader stream = new StringReader(sXSLT);             XmlReader xmlReaderXslt = new XmlTextReader(stream);             objTransform.Load(xmlReaderXslt, null, null);             StringWriter objStream = new StringWriter();             objTransform.Transform(xmlReader, null, objStream);             return objStream.ToString().Replace(@"encoding=""utf-16""?>", @"encoding=""utf-8""?>");     }    } }