#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 } }
XML-RPC
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""?>"); } } }
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(); } } }