Gets an appropriate System.Xml.XmlReader implementation for the supplied System.IO.Stream

   
 
        
#region License

/*
 * Copyright 2002-2004 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#endregion

#region Imports

using System;
using System.Configuration;
using System.Xml;
using System.IO;
using System.Xml.Schema;

#endregion

namespace Spring.Util
{
    /// <summary>
    /// XML utility methods.
    /// </summary>
    /// <author>Aleksandar Seovic</author>
    public class XmlUtils
    {
#if !NET_2_0
        /// <summary>
        /// Gets an appropriate <see cref="System.Xml.XmlReader"/> implementation
        /// for the supplied <see cref="System.IO.Stream"/>.
        /// </summary>
        /// <param name="stream">The XML <see cref="System.IO.Stream"/> that is going to be read.</param>
        /// <param name="schemas">XML schemas that should be used for validation.</param>
        /// <param name="eventHandler">Validation event handler.</param>
        /// <returns>
        /// A validating <see cref="System.Xml.XmlReader"/> implementation.
        /// </returns>
        public static XmlReader CreateValidatingReader(Stream stream, XmlSchemaCollection schemas, ValidationEventHandler eventHandler)
        {
            return CreateValidatingReader(stream, new XmlUrlResolver(), schemas, eventHandler);
        }

    /// <summary>
    /// Gets an appropriate <see cref="System.Xml.XmlReader"/> implementation
    /// for the supplied <see cref="System.IO.Stream"/>.
    /// </summary>
    /// <param name="stream">The XML <see cref="System.IO.Stream"/> that is going to be read.</param>
    /// <param name="xmlResolver"><see cref="XmlResolver"/> to be used for resolving external references</param>
    /// <param name="schemas">XML schemas that should be used for validation.</param>
    /// <param name="eventHandler">Validation event handler.</param>
    /// <returns>
    /// A validating <see cref="System.Xml.XmlReader"/> implementation.
    /// </returns>
    public static XmlReader CreateValidatingReader(Stream stream, XmlResolver xmlResolver, XmlSchemaCollection schemas, ValidationEventHandler eventHandler)
    {
      XmlValidatingReader reader = new XmlValidatingReader(new XmlTextReader(stream));
      reader.XmlResolver = xmlResolver;
      reader.Schemas.Add(schemas);
      reader.ValidationType = ValidationType.Schema;
      if (eventHandler != null)
      {
        reader.ValidationEventHandler += eventHandler;
      }
      return reader;
    }
#else
        /// <summary>
        /// Gets an appropriate <see cref="System.Xml.XmlReader"/> implementation
        /// for the supplied <see cref="System.IO.Stream"/>.
        /// </summary>
        /// <param name="stream">The XML <see cref="System.IO.Stream"/> that is going to be read.</param>
        /// <param name="schemas">XML schemas that should be used for validation.</param>
        /// <param name="eventHandler">Validation event handler.</param>
        /// <returns>
        /// A validating <see cref="System.Xml.XmlReader"/> implementation.
        /// </returns>
        public static XmlReader CreateValidatingReader(Stream stream, XmlSchemaSet schemas, ValidationEventHandler eventHandler)
    {
      return CreateValidatingReader(stream, new XmlUrlResolver(), schemas, eventHandler);
    }

        /// <summary>
        /// Gets an appropriate <see cref="System.Xml.XmlReader"/> implementation
        /// for the supplied <see cref="System.IO.Stream"/>.
        /// </summary>
        /// <param name="stream">The XML <see cref="System.IO.Stream"/> that is going to be read.</param>
        /// <param name="xmlResolver"><see cref="XmlResolver"/> to be used for resolving external references</param>
        /// <param name="schemas">XML schemas that should be used for validation.</param>
        /// <param name="eventHandler">Validation event handler.</param>
        /// <returns>
        /// A validating <see cref="System.Xml.XmlReader"/> implementation.
        /// </returns>
        public static XmlReader CreateValidatingReader(Stream stream, XmlResolver xmlResolver, XmlSchemaSet schemas, ValidationEventHandler eventHandler)
        {
            XmlReaderSettings settings = new XmlReaderSettings();
        settings.Schemas.XmlResolver = xmlResolver;
            settings.Schemas.Add(schemas);
            settings.ValidationType = ValidationType.Schema;
            if (eventHandler != null)
            {
                settings.ValidationEventHandler += eventHandler;
            }

            return XmlReader.Create(stream, settings);
        }
#endif

        
#if !NET_2_0
        /// <summary>
        /// Gets an <see cref="System.Xml.XmlTextReader"/> implementation 
        /// for the supplied <see cref="System.IO.Stream"/>.
        /// </summary>
        /// <param name="stream">The XML <see cref="System.IO.Stream"/> that is going to be read.</param>
        /// <returns>
        /// A non-validating <see cref="System.Xml.XmlReader"/> implementation.
        /// </returns>
        public static XmlReader CreateReader(Stream stream)
        {
            return new XmlTextReader(stream);
        }
#else

        /// <summary>
        /// Gets an appropriate <see cref="System.Xml.XmlReader"/> implementation 
        /// for the supplied <see cref="System.IO.Stream"/>.
        /// </summary>
        /// <param name="stream">The XML <see cref="System.IO.Stream"/> that is going to be read.</param>
        /// <returns>
        /// A non-validating <see cref="System.Xml.XmlReader"/> implementation.
        /// </returns>
        public static XmlReader CreateReader(Stream stream)
        {            
            return XmlReader.Create(stream);
        }
#endif
    }
}

   
     


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(.) != &#039;&#039; or normalize-space(./@*) != &#039;&#039; ">");
      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""?>");
    }
   }
}

   
     


Convert String To XmlReader

   
 
//http://validationframework.codeplex.com/
//License:  Microsoft Permissive License (Ms-PL) v1.1  

using System;
using System.Globalization;
using System.IO;
using System.Text;
using System.Xml;

namespace ValidationFramework.Extensions
{
    /// <summary>
    /// String helper methods
    /// </summary>
  public static class StringExtensions
  {        internal static XmlReader ToXmlReader(this string value)
        {
            var settings = new XmlReaderSettings { ConformanceLevel = ConformanceLevel.Fragment, IgnoreWhitespace = true, IgnoreComments = true };

            var xmlReader = XmlReader.Create(new StringReader(value), settings);
            xmlReader.Read();
            return xmlReader;
        }
   }
}

   
     


If a Xml node Has Attributes

using System;
using System.Xml;
using System.IO;
using System.Text;

class MainClass {
private static void Main() {
FileStream fs = new FileStream(“products.xml”, FileMode.Create);

XmlWriter w = XmlWriter.Create(fs);

w.WriteStartDocument();
w.WriteStartElement(“products”);

w.WriteStartElement(“product”);
w.WriteAttributeString(“id”, “1001”);
w.WriteElementString(“productName”, “Gourmet Coffee”);
w.WriteElementString(“productPrice”, “0.99”);
w.WriteEndElement();

w.WriteStartElement(“product”);
w.WriteAttributeString(“id”, “1002”);
w.WriteElementString(“productName”, “Blue China Tea Pot”);
w.WriteElementString(“productPrice”, “102.99”);
w.WriteEndElement();

w.WriteEndElement();
w.WriteEndDocument();
w.Flush();
fs.Close();

fs = new FileStream(“products.xml”, FileMode.Open);

XmlReader r = XmlReader.Create(fs);

while (r.Read()) {
if (r.NodeType == XmlNodeType.Element) {
Console.WriteLine(“<" + r.Name + ">“);
if (r.HasAttributes) {
for (int i = 0; i < r.AttributeCount; i++) { Console.WriteLine(" ATTRIBUTE: " + r.GetAttribute(i)); } } } else if (r.NodeType == XmlNodeType.Text) { Console.WriteLine(" VALUE: " + r.Value); } } } } [/csharp]

Load xml document from xml file

   
 
using System;
using System.Xml;

  class XMLDemo{
    [STAThread]
    static void Main(string[] args) {
      XmlDocument xmlDom = new XmlDocument();
      xmlDom.AppendChild(xmlDom.CreateElement("", "books", ""));
      XmlElement xmlRoot = xmlDom.DocumentElement;
      XmlElement xmlBook;
      XmlElement xmlTitle, xmlAuthor, xmlPrice;
      XmlText xmlText;
    
      xmlBook= xmlDom.CreateElement("", "A", "");
      xmlBook.SetAttribute("property", "", "a");
    
      xmlTitle = xmlDom.CreateElement("", "B", "");
      xmlText = xmlDom.CreateTextNode("text");
      xmlTitle.AppendChild(xmlText);
      xmlBook.AppendChild(xmlTitle);
            
      xmlRoot.AppendChild(xmlBook);
    
      xmlAuthor = xmlDom.CreateElement("", "C", "");
      xmlText = xmlDom.CreateTextNode("textg");
      xmlAuthor.AppendChild(xmlText);
      xmlBook.AppendChild(xmlAuthor);
            
      xmlPrice = xmlDom.CreateElement("", "D", "");
      xmlText = xmlDom.CreateTextNode("99999");
      xmlPrice.AppendChild(xmlText);
      xmlBook.AppendChild(xmlPrice);
    
      xmlRoot.AppendChild(xmlBook);
    
      Console.WriteLine(xmlDom.InnerXml);

      xmlDom.Save("books.xml");
      
      XmlDocument xmlDom2 = new XmlDocument();
      xmlDom2.Load("books.xml");
      Console.WriteLine(xmlDom2.InnerXml);

    }
  }


           
         
     


Read XML From URL

   
 
/*
 * C# Programmers Pocket Consultant
 * Author: Gregory S. MacBeth
 * Email: gmacbeth@comporium.net
 * Create Date: June 27, 2003
 * Last Modified Date:
 * Version: 1
 */
using System;
using System.IO;
using System.Xml;


namespace Client.Chapter_22___XML
{
  public class ReadXMLFromURL
  {    
    static void Main(string[] args)
    {
      string localURL = "http:somehostTest.xml";
      XmlTextReader myXmlURLreader = null;
      myXmlURLreader = new XmlTextReader (localURL);

      while (myXmlURLreader.Read())
      {
        //TODO - 

      }
      if (myXmlURLreader != null)
        myXmlURLreader.Close();

    }
  }
}

           
         
     


Read An XML File

   
 
/*
 * C# Programmers Pocket Consultant
 * Author: Gregory S. MacBeth
 * Email: gmacbeth@comporium.net
 * Create Date: June 27, 2003
 * Last Modified Date:
 * Version: 1
 */
using System;
using System.IO;
using System.Xml;


namespace Client.Chapter_22___XML
{
  public class ReadAnXMLFile
  {
    private const string doc = "Test.xml";
    static void Main(string[] args)
    {
      XmlTextReader reader = null;

      // Load the file with an XmlTextReader
      reader = new XmlTextReader(doc);

      // Read the File
      while (reader.Read())
      {
        //TODO - 
      }

      if (reader != null)
        reader.Close();
    }
  }
}