#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> /// Create an element type XmlNode like /// </summary> /// <param name="xmldoc"></param> /// <param name="nodeName"></param> /// <param name="nodeValue"></param> /// <param name="namespaceURI"></param> /// <returns>an XmlNode of element type</returns> /// ----------------------------------------------------------- public static XmlNode CreateTextElementNode(XmlDocument xmldoc, string nodeName, object nodeValue, string namespaceURI) { XmlNode aNode = xmldoc.CreateElement(nodeName, namespaceURI); if (nodeValue != null) aNode.AppendChild(xmldoc.CreateTextNode(nodeValue.ToString())); return aNode; } /// ------------------------------------------------------------------- /// <summary> /// Create an element that holds a blog of data in Base64 format. /// The blog of data is passed in as an array of byte. /// </summary> /// <param name="xmldoc"></param> /// <param name="nodeName">name of the node in which the data is to be held under</param> /// <param name="inputBytes">blog of data to be converted to Base64</param> /// <param name="namespaceURI"></param> /// <returns></returns> /// ------------------------------------------------------------------- public static XmlNode CreateBase64ElementNode(XmlDocument xmldoc, string nodeName, byte[] inputBytes, string namespaceURI) { // Convet byte array into Base64 string string encodedData = Convert.ToBase64String(inputBytes); return CreateTextElementNode(xmldoc, nodeName, encodedData, namespaceURI); } } }
XML-RPC
Load XML file to DataTable then add DataTable to ListView
/* <?xml version="1.0" standalone="yes"?> <NewDataSet> <Employee> <ID>8</ID> <Name>Joe</Name> </Employee> </NewDataSet> */ using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; public class Form1 : Form { private System.Windows.Forms.Button cmdFillList; private System.Windows.Forms.ListView listView; private System.Windows.Forms.CheckBox chkGroups; public Form1() { InitializeComponent(); listView.View = View.Tile; listView.TileSize = new Size(300, 50); FillList(); } public static DataTable GetProducts() { DataSet dsStore = new DataSet(); dsStore.ReadXml("myXmlFile.xml"); return dsStore.Tables["Employee"]; } public static DataTable GetCategories() { DataSet dsStore = new DataSet(); dsStore.ReadXml("myXmlFile.xml"); return dsStore.Tables["Employee"]; } private void cmdFillList_Click(object sender, EventArgs e) { FillList(); } private void FillList() { listView.Items.Clear(); if (listView.Groups.Count == 0) { DataTable dtGroups = GetCategories(); foreach (DataRow dr in dtGroups.Rows) { listView.Groups.Add(dr["ID"].ToString(), dr["Name"].ToString()); } } listView.ShowGroups = chkGroups.Checked; DataTable dtProducts = GetProducts(); listView.BeginUpdate(); foreach (DataRow dr in dtProducts.Rows) { ListViewItem listItem = new ListViewItem(dr["Name"].ToString()); listItem.ImageIndex = 0; listItem.Group = listView.Groups[dr["ID"].ToString()]; listItem.SubItems.Add(dr["ID"].ToString()); listView.Items.Add(listItem); } if (listView.Columns.Count == 0) { listView.Columns.Add("Product", 100, HorizontalAlignment.Left); listView.Columns.Add("ID", 100, HorizontalAlignment.Left); listView.Columns.Add("Description", 100, HorizontalAlignment.Left); } listView.EndUpdate(); } private void NewView(object sender, System.EventArgs e) { listView.View = (View)(((Control)sender).Tag); } private void listView_ColumnClick(object sender, ColumnClickEventArgs e) { ListViewItemComparer sorter = listView.ListViewItemSorter as ListViewItemComparer; if (sorter == null) { sorter = new ListViewItemComparer(e.Column); listView.ListViewItemSorter = sorter; } else { if (sorter.Column == e.Column && !sorter.Descending) { sorter.Descending = true; listView.Sorting = SortOrder.Descending; } else { listView.Sorting = SortOrder.Ascending; sorter.Descending = false; sorter.Column = e.Column; } } listView.Sort(); } private void cmdResizeColumns_Click(object sender, EventArgs e) { listView.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize); } private void listView_SelectedIndexChanged(object sender, EventArgs e) { if (listView.SelectedItems.Count > 0) Console.WriteLine(listView.SelectedItems[0].SubItems[2].Text); } private void chkGroups_CheckedChanged(object sender, EventArgs e) { FillList(); } private void InitializeComponent() { this.cmdFillList = new System.Windows.Forms.Button(); this.listView = new System.Windows.Forms.ListView(); this.chkGroups = new System.Windows.Forms.CheckBox(); this.SuspendLayout(); // // cmdFillList // this.cmdFillList.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.cmdFillList.FlatStyle = System.Windows.Forms.FlatStyle.System; this.cmdFillList.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.cmdFillList.Location = new System.Drawing.Point(269, 195); this.cmdFillList.Name = "cmdFillList"; this.cmdFillList.Size = new System.Drawing.Size(114, 24); this.cmdFillList.TabIndex = 7; this.cmdFillList.Text = "Fill List"; this.cmdFillList.Click += new System.EventHandler(this.cmdFillList_Click); // // listView // this.listView.AllowColumnReorder = true; this.listView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.listView.FullRowSelect = true; this.listView.GridLines = true; this.listView.Location = new System.Drawing.Point(7, 8); this.listView.MultiSelect = false; this.listView.Name = "listView"; this.listView.Size = new System.Drawing.Size(254, 282); this.listView.Sorting = System.Windows.Forms.SortOrder.Ascending; this.listView.TabIndex = 6; this.listView.SelectedIndexChanged += new System.EventHandler(this.listView_SelectedIndexChanged); this.listView.ColumnClick += new System.Windows.Forms.ColumnClickEventHandler(this.listView_ColumnClick); this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(390, 381); this.Controls.Add(this.listView); this.Controls.Add(this.cmdFillList); this.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.Name = "Form1"; this.Text = "ListView Example"; this.ResumeLayout(false); this.PerformLayout(); } [STAThread] static void Main() { Application.EnableVisualStyles(); Application.Run(new Form1()); } } public class ListViewItemComparer : System.Collections.IComparer { private int column; public int Column { get { return column; } set { column = value; } } private bool numeric = false; public bool Numeric { get { return numeric; } set { numeric = value; } } private bool descending = false; public bool Descending { get { return descending; } set { descending = value; } } public ListViewItemComparer(int columnIndex) { Column = columnIndex; } public int Compare(object x, object y) { ListViewItem listX, listY; if (descending) { listY = (ListViewItem)x; listX = (ListViewItem)y; } else { listX = (ListViewItem)x; listY = (ListViewItem)y; } if (Numeric) { decimal valX, valY; Decimal.TryParse(listX.SubItems[Column].Text, out valX); Decimal.TryParse(listY.SubItems[Column].Text, out valY); return Decimal.Compare(valX, valY); } else { return String.Compare( listX.SubItems[Column].Text, listY.SubItems[Column].Text); } } }
Load data in database table to XML format and save it to DataGrid
using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; using System.Data.SqlClient; using System.Configuration; using System.Xml; public class Form1 : System.Windows.Forms.Form { private System.Windows.Forms.Button btnReadXml; private System.Windows.Forms.Button btnWriteXml; private System.Windows.Forms.Button btnConfigXml; private System.Windows.Forms.DataGrid dataGrid1; private System.ComponentModel.Container components = null; public Form1() { InitializeComponent(); } private void InitializeComponent() { this.btnReadXml = new System.Windows.Forms.Button(); this.btnWriteXml = new System.Windows.Forms.Button(); this.btnConfigXml = new System.Windows.Forms.Button(); this.dataGrid1 = new System.Windows.Forms.DataGrid(); ((System.ComponentModel.ISupportInitialize)(this.dataGrid1)).BeginInit(); this.SuspendLayout(); this.btnReadXml.Location = new System.Drawing.Point(8, 8); this.btnReadXml.Name = "btnReadXml"; this.btnReadXml.TabIndex = 0; this.btnReadXml.Text = "Read XML"; this.btnReadXml.Click += new System.EventHandler(this.btnReadXml_Click); this.btnWriteXml.Location = new System.Drawing.Point(8, 48); this.btnWriteXml.Name = "btnWriteXml"; this.btnWriteXml.TabIndex = 1; this.btnWriteXml.Text = "Write XML"; this.btnWriteXml.Click += new System.EventHandler(this.btnWriteXml_Click); this.btnConfigXml.Location = new System.Drawing.Point(8, 88); this.btnConfigXml.Name = "btnConfigXml"; this.btnConfigXml.TabIndex = 2; this.btnConfigXml.Text = "Config"; this.btnConfigXml.Click += new System.EventHandler(this.btnConfigXml_Click); this.dataGrid1.DataMember = ""; this.dataGrid1.HeaderForeColor = System.Drawing.SystemColors.ControlText; this.dataGrid1.Location = new System.Drawing.Point(104, 8); this.dataGrid1.Name = "dataGrid1"; this.dataGrid1.Size = new System.Drawing.Size(184, 192); this.dataGrid1.TabIndex = 3; this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size(292, 272); this.Controls.Add(this.dataGrid1); this.Controls.Add(this.btnConfigXml); this.Controls.Add(this.btnWriteXml); this.Controls.Add(this.btnReadXml); this.Name = "Form1"; this.Text = "XML Demo"; ((System.ComponentModel.ISupportInitialize)(this.dataGrid1)).EndInit(); this.ResumeLayout(false); } static void Main() { Application.Run(new Form1()); } private void btnReadXml_Click(object sender, System.EventArgs e) { DataSet ds = new DataSet(); ds.ReadXml("Employee.xml",XmlReadMode.InferSchema); dataGrid1.SetDataBinding(ds, "Employee"); } private void btnWriteXml_Click(object sender, System.EventArgs e) { DataSet ds = (DataSet) dataGrid1.DataSource; ds.WriteXml("XMLFileOut.xml",XmlWriteMode.IgnoreSchema); } private void btnConfigXml_Click(object sender, System.EventArgs e) { string connString = @"server=(local)SQLEXPRESS;database=MyDatabase;Integrated Security=SSPI"; SqlConnection conn = new SqlConnection(connString); SqlCommand cmd = new SqlCommand(); cmd.Connection = conn; cmd.CommandText = @"select id,lastname from employee for xml auto"; try { conn.Open(); XmlReader xmlrdr = cmd.ExecuteXmlReader(); DataSet ds = new DataSet(); ds.ReadXml(xmlrdr,XmlReadMode.InferSchema); dataGrid1.DataSource=ds; } catch (SqlException ex) { MessageBox.Show (ex.Message); } finally { conn.Close(); } } } /* File: Employee.xml <?xml version="1.0" standalone="yes"?> <NewDataSet> <employee id="1" lastname="Yin "> </employee> </NewDataSet> */
Save data in DataGrid into XML file
using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; using System.Data.SqlClient; using System.Configuration; using System.Xml; public class Form1 : System.Windows.Forms.Form { private System.Windows.Forms.Button btnReadXml; private System.Windows.Forms.Button btnWriteXml; private System.Windows.Forms.Button btnConfigXml; private System.Windows.Forms.DataGrid dataGrid1; private System.ComponentModel.Container components = null; public Form1() { InitializeComponent(); } private void InitializeComponent() { this.btnReadXml = new System.Windows.Forms.Button(); this.btnWriteXml = new System.Windows.Forms.Button(); this.btnConfigXml = new System.Windows.Forms.Button(); this.dataGrid1 = new System.Windows.Forms.DataGrid(); ((System.ComponentModel.ISupportInitialize)(this.dataGrid1)).BeginInit(); this.SuspendLayout(); this.btnReadXml.Location = new System.Drawing.Point(8, 8); this.btnReadXml.Name = "btnReadXml"; this.btnReadXml.TabIndex = 0; this.btnReadXml.Text = "Read XML"; this.btnReadXml.Click += new System.EventHandler(this.btnReadXml_Click); this.btnWriteXml.Location = new System.Drawing.Point(8, 48); this.btnWriteXml.Name = "btnWriteXml"; this.btnWriteXml.TabIndex = 1; this.btnWriteXml.Text = "Write XML"; this.btnWriteXml.Click += new System.EventHandler(this.btnWriteXml_Click); this.btnConfigXml.Location = new System.Drawing.Point(8, 88); this.btnConfigXml.Name = "btnConfigXml"; this.btnConfigXml.TabIndex = 2; this.btnConfigXml.Text = "Config"; this.btnConfigXml.Click += new System.EventHandler(this.btnConfigXml_Click); this.dataGrid1.DataMember = ""; this.dataGrid1.HeaderForeColor = System.Drawing.SystemColors.ControlText; this.dataGrid1.Location = new System.Drawing.Point(104, 8); this.dataGrid1.Name = "dataGrid1"; this.dataGrid1.Size = new System.Drawing.Size(184, 192); this.dataGrid1.TabIndex = 3; this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size(292, 272); this.Controls.Add(this.dataGrid1); this.Controls.Add(this.btnConfigXml); this.Controls.Add(this.btnWriteXml); this.Controls.Add(this.btnReadXml); this.Name = "Form1"; this.Text = "XML Demo"; ((System.ComponentModel.ISupportInitialize)(this.dataGrid1)).EndInit(); this.ResumeLayout(false); } static void Main() { Application.Run(new Form1()); } private void btnReadXml_Click(object sender, System.EventArgs e) { DataSet ds = new DataSet(); ds.ReadXml("Employee.xml",XmlReadMode.InferSchema); dataGrid1.SetDataBinding(ds, "Employee"); } private void btnWriteXml_Click(object sender, System.EventArgs e) { DataSet ds = (DataSet) dataGrid1.DataSource; ds.WriteXml("XMLFileOut.xml",XmlWriteMode.IgnoreSchema); } private void btnConfigXml_Click(object sender, System.EventArgs e) { string connString = @"server=(local)SQLEXPRESS;database=MyDatabase;Integrated Security=SSPI"; SqlConnection conn = new SqlConnection(connString); SqlCommand cmd = new SqlCommand(); cmd.Connection = conn; cmd.CommandText = @"select id,lastname from employee for xml auto"; try { conn.Open(); XmlReader xmlrdr = cmd.ExecuteXmlReader(); DataSet ds = new DataSet(); ds.ReadXml(xmlrdr,XmlReadMode.InferSchema); dataGrid1.DataSource=ds; } catch (SqlException ex) { MessageBox.Show (ex.Message); } finally { conn.Close(); } } } /* File: Employee.xml <?xml version="1.0" standalone="yes"?> <NewDataSet> <employee id="1" lastname="Yin "> </employee> </NewDataSet> */
Read XML data from file into DataGrid
using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; using System.Data.SqlClient; using System.Configuration; using System.Xml; public class Form1 : System.Windows.Forms.Form { private System.Windows.Forms.Button btnReadXml; private System.Windows.Forms.Button btnWriteXml; private System.Windows.Forms.Button btnConfigXml; private System.Windows.Forms.DataGrid dataGrid1; private System.ComponentModel.Container components = null; public Form1() { InitializeComponent(); } private void InitializeComponent() { this.btnReadXml = new System.Windows.Forms.Button(); this.btnWriteXml = new System.Windows.Forms.Button(); this.btnConfigXml = new System.Windows.Forms.Button(); this.dataGrid1 = new System.Windows.Forms.DataGrid(); ((System.ComponentModel.ISupportInitialize)(this.dataGrid1)).BeginInit(); this.SuspendLayout(); this.btnReadXml.Location = new System.Drawing.Point(8, 8); this.btnReadXml.Name = "btnReadXml"; this.btnReadXml.TabIndex = 0; this.btnReadXml.Text = "Read XML"; this.btnReadXml.Click += new System.EventHandler(this.btnReadXml_Click); this.btnWriteXml.Location = new System.Drawing.Point(8, 48); this.btnWriteXml.Name = "btnWriteXml"; this.btnWriteXml.TabIndex = 1; this.btnWriteXml.Text = "Write XML"; this.btnWriteXml.Click += new System.EventHandler(this.btnWriteXml_Click); this.btnConfigXml.Location = new System.Drawing.Point(8, 88); this.btnConfigXml.Name = "btnConfigXml"; this.btnConfigXml.TabIndex = 2; this.btnConfigXml.Text = "Config"; this.btnConfigXml.Click += new System.EventHandler(this.btnConfigXml_Click); this.dataGrid1.DataMember = ""; this.dataGrid1.HeaderForeColor = System.Drawing.SystemColors.ControlText; this.dataGrid1.Location = new System.Drawing.Point(104, 8); this.dataGrid1.Name = "dataGrid1"; this.dataGrid1.Size = new System.Drawing.Size(184, 192); this.dataGrid1.TabIndex = 3; this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size(292, 272); this.Controls.Add(this.dataGrid1); this.Controls.Add(this.btnConfigXml); this.Controls.Add(this.btnWriteXml); this.Controls.Add(this.btnReadXml); this.Name = "Form1"; this.Text = "XML Demo"; ((System.ComponentModel.ISupportInitialize)(this.dataGrid1)).EndInit(); this.ResumeLayout(false); } static void Main() { Application.Run(new Form1()); } private void btnReadXml_Click(object sender, System.EventArgs e) { DataSet ds = new DataSet(); ds.ReadXml("Employee.xml",XmlReadMode.InferSchema); dataGrid1.SetDataBinding(ds, "Employee"); } private void btnWriteXml_Click(object sender, System.EventArgs e) { DataSet ds = (DataSet) dataGrid1.DataSource; ds.WriteXml("XMLFileOut.xml",XmlWriteMode.IgnoreSchema); } private void btnConfigXml_Click(object sender, System.EventArgs e) { string connString = @"server=(local)SQLEXPRESS;database=MyDatabase;Integrated Security=SSPI"; SqlConnection conn = new SqlConnection(connString); SqlCommand cmd = new SqlCommand(); cmd.Connection = conn; cmd.CommandText = @"select id,lastname from employee for xml auto"; try { conn.Open(); XmlReader xmlrdr = cmd.ExecuteXmlReader(); DataSet ds = new DataSet(); ds.ReadXml(xmlrdr,XmlReadMode.InferSchema); dataGrid1.DataSource=ds; } catch (SqlException ex) { MessageBox.Show (ex.Message); } finally { conn.Close(); } } } /* File: Employee.xml <?xml version="1.0" standalone="yes"?> <NewDataSet> <employee id="1" lastname="Yin "> </employee> </NewDataSet> */
Create XML document: xml element and properties
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); } }
Append Child
using System; using System.Xml; class MainClass { public static void Main() { XmlDocument doc = new XmlDocument(); XmlNode docNode = doc.CreateXmlDeclaration("1.0", "UTF-8", null); doc.AppendChild(docNode); XmlNode productsNode = doc.CreateElement("products"); doc.AppendChild(productsNode); XmlNode productNode = doc.CreateElement("product"); XmlAttribute productAttribute = doc.CreateAttribute("id"); productAttribute.Value = "1001"; productNode.Attributes.Append(productAttribute); productsNode.AppendChild(productNode); XmlNode nameNode = doc.CreateElement("productName"); nameNode.AppendChild(doc.CreateTextNode("Coffee")); productNode.AppendChild(nameNode); XmlNode priceNode = doc.CreateElement("productPrice"); priceNode.AppendChild(doc.CreateTextNode("0.99")); productNode.AppendChild(priceNode); productNode = doc.CreateElement("product"); productAttribute = doc.CreateAttribute("id"); productAttribute.Value = "1002"; productNode.Attributes.Append(productAttribute); productsNode.AppendChild(productNode); nameNode = doc.CreateElement("productName"); nameNode.AppendChild(doc.CreateTextNode("Tea Pot")); productNode.AppendChild(nameNode); priceNode = doc.CreateElement("productPrice"); priceNode.AppendChild(doc.CreateTextNode("12.99")); productNode.AppendChild(priceNode); doc.Save(Console.Out); } }