/*
Mastering Visual C# .NET
by Jason Price, Mike Gunderloy
Publisher: Sybex;
ISBN: 0782129110
*/
/*
Example20_1.cs illustrates the XmlTextWriter class
*/
using System;
using System.Xml;
public class Example20_1
{
public static void Main()
{
// use the XmlTextWriter to open a new XML file
XmlTextWriter xw = new XmlTextWriter(@"Cust4.xml",
System.Text.Encoding.UTF8);
// write the document declaration
xw.WriteStartDocument();
// write the first element
xw.WriteStartElement("NewDataSet");
// write the first customer
xw.WriteStartElement("Customers");
xw.WriteElementString("CustomerID", "ALFKI");
xw.WriteElementString("CompanyName", "Alfreds Futterkiste");
xw.WriteElementString("ContactName", "Maria Anders");
xw.WriteElementString("ContactTitle", "Sales Representative");
xw.WriteElementString("Address", "Obere Str. 57");
xw.WriteElementString("City", "Berlin");
xw.WriteElementString("PostalCode", "12209");
xw.WriteElementString("Country", "Germany");
xw.WriteElementString("Phone", "030-0074321");
xw.WriteElementString("Fax", "030-0076545");
xw.WriteEndElement();
// write the second customer
xw.WriteStartElement("Customers");
xw.WriteElementString("CustomerID", "BONAPP");
xw.WriteElementString("CompanyName", "Bon App'");
xw.WriteElementString("ContactName", "Laurence Lebihan");
xw.WriteElementString("ContactTitle", "Owner");
xw.WriteElementString("Address", "12, rue des Bouchers");
xw.WriteElementString("City", "Marseille");
xw.WriteElementString("PostalCode", "13008");
xw.WriteElementString("Country", "France");
xw.WriteElementString("Phone", "91.24.45.40");
xw.WriteElementString("Fax", "91.24.45.41");
xw.WriteEndElement();
// end the NewDataSet element
xw.WriteEndElement();
// end the document
xw.WriteEndDocument();
// flush and close
xw.Flush();
xw.Close();
}
}
/**/
XML-RPC
Write To 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;
using System.Xml.Schema;
namespace Client.Chapter_22___XML
{
public class WriteToXMLFile
{
static void Main(string[] args)
{
string document = "newbooks.xml";
XmlTextWriter myXmlTextWriter = null;
XmlTextReader myXmlTextReader = null;
myXmlTextWriter = new XmlTextWriter(args[1], null);
myXmlTextWriter.Formatting = Formatting.Indented;
myXmlTextWriter.WriteStartDocument(false);
myXmlTextWriter.WriteDocType("bookstore", null, "books.dtd", null);
myXmlTextWriter.WriteComment("This file represents another fragment of a book store inventory database");
myXmlTextWriter.WriteStartElement("bookstore");
myXmlTextWriter.WriteStartElement("book", null);
myXmlTextWriter.WriteAttributeString("genre", "autobiography");
myXmlTextWriter.WriteAttributeString("publicationdate", "1979");
myXmlTextWriter.WriteAttributeString("ISBN", "0-7356-0562-9");
myXmlTextWriter.WriteElementString("title", null, "The Autobiography of Mark Twain");
myXmlTextWriter.WriteStartElement("Author", null);
myXmlTextWriter.WriteElementString("first-name", "Mark");
myXmlTextWriter.WriteElementString("last-name", "Twain");
myXmlTextWriter.WriteEndElement();
myXmlTextWriter.WriteElementString("price", "7.99");
myXmlTextWriter.WriteEndElement();
myXmlTextWriter.WriteEndElement();
//Write the XML to file and close the writer
myXmlTextWriter.Flush();
myXmlTextWriter.Close();
if (myXmlTextWriter != null)
myXmlTextWriter.Close();
}
}
}
Writing XML with the XmlWriter Class
using System;
using System.IO;
using System.Xml;
class MainClass
{
static public void Main()
{
XmlTextWriter XmlWriter = new XmlTextWriter(Console.Out);
XmlWriter.WriteStartDocument();
XmlWriter.WriteComment("This is the comments.");
XmlWriter.WriteStartElement("BOOK");
XmlWriter.WriteElementString("TITLE", "this is the title.");
XmlWriter.WriteElementString("AUTHOR", "I am the author.");
XmlWriter.WriteElementString("PUBLISHER", "who is the publisher");
XmlWriter.WriteEndElement();
XmlWriter.WriteEndDocument();
}
}
Read and Write XML Without Loading an Entire Document into Memory
using System;
using System.Xml;
using System.IO;
using System.Text;
public class ReadWriteXml {
private static void Main() {
FileStream fs = new FileStream(“products.xml”, FileMode.Create);
XmlTextWriter w = new XmlTextWriter(fs, Encoding.UTF8);
w.WriteStartDocument();
w.WriteStartElement(“products”);
w.WriteStartElement(“product”);
w.WriteAttributeString(“id”, “01”);
w.WriteElementString(“name”, “C#”);
w.WriteElementString(“price”, “0.99”);
w.WriteEndElement();
w.WriteEndElement();
w.WriteEndDocument();
w.Flush();
fs.Close();
Console.WriteLine(“Document created.”);
fs = new FileStream(“products.xml”, FileMode.Open);
XmlTextReader r = new XmlTextReader(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]
Create XML document with XmlWriter
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", "Tea Pot");
w.WriteElementString("productPrice", "12.99");
w.WriteEndElement();
w.WriteEndElement();
w.WriteEndDocument();
w.Flush();
fs.Close();
}
}
Pretty Print XML
#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>
/// Pretty Print XML
/// </summary>
/// <param name="xml"></param>
/// <returns>Pretty print xml string</returns>
/// <remarks> Thanks to http://dotnet.editme.com/codePrettyPrintXML</remarks>
/// -----------------------------------------------------------
public static string PrettyPrint(string xml)
{
XmlDocument xmlDom = new XmlDocument();
// Load the XmlDocument with the XML.
xmlDom.LoadXml(xml);
return PrettyPrint(xmlDom);
}
/// -----------------------------------------------------------
/// <summary>
/// Print Print an <see cref="XmlDocument"/>
/// </summary>
/// <param name="xmlDom"></param>
/// <returns></returns>
/// -----------------------------------------------------------
public static string PrettyPrint(XmlDocument xmlDom)
{
return PrettyPrint(xmlDom, true);
}
/// <summary>
/// Print Print an <see cref="XmlNode"/>
/// </summary>
/// <param name="xmlNode"></param>
/// <returns></returns>
public static string PrettyPrint(XmlNode xmlNode)
{
return PrettyPrint(xmlNode, false);
}
/// <summary>
/// Pretty Print an <see cref="XmlDocument"/> or an <see cref="XmlNode"/>
/// </summary>
/// <param name="xmlObj"></param>
/// <param name="isXmlDoc"></param>
/// <returns></returns>
public static string PrettyPrint(object xmlObj, bool isXmlDoc)
{
if (!(xmlObj is XmlDocument || xmlObj is XmlDataDocument ||
xmlObj is XmlNode || xmlObj is XmlElement))
throw new ArgumentException("xmlObj must be either an XmlDocument, XmlDataDocument, XmlNode or an XmlElement object");
String prettyXml = "";
MemoryStream memStream = new MemoryStream();
XmlTextWriter xmlTextWriter = new XmlTextWriter(memStream, Encoding.Unicode);
try
{
xmlTextWriter.Formatting = Formatting.Indented;
xmlTextWriter.Indentation = 4;
xmlTextWriter.QuoteChar = ''';
// Write the XML into a formatting XmlTextWriter
if (xmlObj is XmlDocument)
((XmlDocument)xmlObj).WriteContentTo(xmlTextWriter);
else if (xmlObj is XmlDataDocument)
((XmlDataDocument)xmlObj).WriteContentTo(xmlTextWriter);
else
((XmlNode)xmlObj).ParentNode.WriteContentTo(xmlTextWriter);
xmlTextWriter.Flush();
memStream.Flush();
// Have to rewind the MemoryStream in order to read
// its contents.
memStream.Position = 0;
// Read MemoryStream contents into a StreamReader.
StreamReader streamReader = new StreamReader(memStream);
// Extract the text from the StreamReader.
String sFormattedXML = streamReader.ReadToEnd();
prettyXml = sFormattedXML;
}
catch
{
}
memStream.Close();
xmlTextWriter.Close();
return prettyXml;
}
}
}
Display XML file content to TreeView
using System;
using System.Windows.Forms;
using System.Xml;
public class XmlTreeDisplay : System.Windows.Forms.Form{
private System.Windows.Forms.TreeView treeXml = new TreeView();
public XmlTreeDisplay() {
treeXml.Nodes.Clear();
this.Controls.Add(treeXml);
// Load the XML Document
XmlDocument doc = new XmlDocument();
try {
doc.Load("books.xml");
}catch (Exception err) {
MessageBox.Show(err.Message);
return;
}
ConvertXmlNodeToTreeNode(doc, treeXml.Nodes);
treeXml.Nodes[0].ExpandAll();
}
private void ConvertXmlNodeToTreeNode(XmlNode xmlNode,
TreeNodeCollection treeNodes) {
TreeNode newTreeNode = treeNodes.Add(xmlNode.Name);
switch (xmlNode.NodeType) {
case XmlNodeType.ProcessingInstruction:
case XmlNodeType.XmlDeclaration:
newTreeNode.Text = "<?" + xmlNode.Name + " " +
xmlNode.Value + "?>";
break;
case XmlNodeType.Element:
newTreeNode.Text = "<" + xmlNode.Name + ">";
break;
case XmlNodeType.Attribute:
newTreeNode.Text = "ATTRIBUTE: " + xmlNode.Name;
break;
case XmlNodeType.Text:
case XmlNodeType.CDATA:
newTreeNode.Text = xmlNode.Value;
break;
case XmlNodeType.Comment:
newTreeNode.Text = "<!--" + xmlNode.Value + "-->";
break;
}
if (xmlNode.Attributes != null) {
foreach (XmlAttribute attribute in xmlNode.Attributes) {
ConvertXmlNodeToTreeNode(attribute, newTreeNode.Nodes);
}
}
foreach (XmlNode childNode in xmlNode.ChildNodes) {
ConvertXmlNodeToTreeNode(childNode, newTreeNode.Nodes);
}
}
public static void Main(){
Application.Run(new XmlTreeDisplay());
}
}
/*
<books>
<A property="a">
<B>text</B>
<C>textg</C>
<D>99999</D>
</A>
</books>
*/