#region Using directives
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
//
using System.Xml;
//using System;
//using System.Data; // Use ADO.NET namespace
using System.Data.SqlClient; // Use SQL Server data provider namespace
using System.Collections.Specialized;
using System.Text;
#endregion
namespace CNEE.IF.VCY
{
/// <summary>
/// xml文件(节点)操作类
/// </summary>
public class cXML
{
#region 变量
#region 参考
static public void cMain(string[] args)
{
SqlConnection thisConnection = new SqlConnection(@"server=dcwl;integrated security=true;"+"database=cjgl");
DataSet thisDataSet = new DataSet();
//////////////////////////////////////////////////////
//SqlDataAdapter thisADapter = new SqlDataAdapter("select stuid,name from student",thisConnection);
//SqlCommandBuilder thisBuilder = new SqlCommandBuilder(thisADapter);
SqlDataAdapter custAdapter = new SqlDataAdapter("select * from student",thisConnection);
SqlDataAdapter orderAdapter = new SqlDataAdapter("select * from cji",thisConnection);
////////填充到内存的student和cji表中
custAdapter.Fill(thisDataSet,"student");
orderAdapter.Fill(thisDataSet,"cji");
// SqlDataAdapter detailAdapter = new SqlDataAdapter("select *from [chaxun]",thisConnection);
DataRelation custOrderRel = thisDataSet.Relations.Add("cjdan",thisDataSet.Tables["student"].Columns["stuid"],thisDataSet.Tables["cji"].Columns["stuid"]);
/////////////////////////////////// //内存表
foreach(DataRow custRow in thisDataSet.Tables["student"].Rows)
{
Console.WriteLine("student ID:"+custRow["stuid"]+"name:"+custRow["name"]);
foreach (DataRow orderRow in custRow.GetChildRows(custOrderRel))
{
Console.WriteLine("成绩:"+"数学"+orderRow["marth"]+"外语:"+orderRow["English"]+"语文:"+orderRow["china"]);
}
}
custOrderRel.Nested = true;
thisDataSet.WriteXml(@"c:/xml.xml");//写入到xml文件
////////////////////
DataSet thatDataSet = new DataSet();
thatDataSet.ReadXml(@"xml.xml");//从XML文件中读出
foreach (DataRow custRow in thatDataSet.Tables["student"].Rows)
{
Console.WriteLine("stuid:"+custRow["stuid"]+"name:"+custRow["name"]);
}
Console.WriteLine("创建DataSet的表是:{0}",thatDataSet.Tables[0].TableName);
//Console.ReadKey();
//////////////////////////////////////////////////////
}
//////////////////////////////////////////////访问多个表
static public void dMain(string[] args)
{
// Specify SQL Server-specific connection string
SqlConnection thisConnection = new SqlConnection(
@"Server=(local)/sqlexpress;Integrated Security=True;" +
"Database=northwind");
DataSet thisDataSet = new DataSet();
SqlDataAdapter custAdapter = new SqlDataAdapter(
"SELECT * FROM Customers", thisConnection);
custAdapter.Fill(thisDataSet, "Customers");
SqlDataAdapter orderAdapter = new SqlDataAdapter(
"SELECT * FROM Orders", thisConnection);
orderAdapter.Fill(thisDataSet, "Orders");
SqlDataAdapter detailAdapter = new SqlDataAdapter(
"SELECT * FROM [Order Details]", thisConnection);
detailAdapter.Fill(thisDataSet, "Order Details");
SqlDataAdapter prodAdapter = new SqlDataAdapter(
"SELECT * FROM Products", thisConnection);
prodAdapter.Fill(thisDataSet, "Products");
DataRelation custOrderRel = thisDataSet.Relations.Add("CustOrders",
thisDataSet.Tables["Customers"].Columns["CustomerID"],
thisDataSet.Tables["Orders"].Columns["CustomerID"]);
DataRelation orderDetailRel = thisDataSet.Relations.Add("OrderDetail",
thisDataSet.Tables["Orders"].Columns["OrderID"],
thisDataSet.Tables["Order Details"].Columns["OrderID"]);
DataRelation orderProductRel = thisDataSet.Relations.Add(
"OrderProducts", thisDataSet.Tables["Products"].Columns["ProductID"],
thisDataSet.Tables["Order Details"].Columns["ProductID"]);
foreach (DataRow custRow in thisDataSet.Tables["Customers"].Rows)
{
Console.WriteLine("Customer ID: " + custRow["CustomerID"]);
foreach (DataRow orderRow in custRow.GetChildRows(custOrderRel))
{
Console.WriteLine("/tOrder ID: " + orderRow["OrderID"]);
Console.WriteLine("/t/tOrder Date: " + orderRow["OrderDate"]);
foreach (DataRow detailRow in
orderRow.GetChildRows(orderDetailRel))
{
Console.WriteLine("/t/tProduct: " +
detailRow.GetParentRow(orderProductRel)["ProductName"]);
Console.WriteLine("/t/tQuantity: " + detailRow["Quantity"]);
}
}
}
thisConnection.Close();
Console.Write("Program finished, press Enter/Return to continue:");
Console.ReadLine();
}
#endregion
#endregion
public cXML()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
private XmlDocument xmlDoc;
private string msg;
#region 创建XML文件
/// <summary>
/// 创建一个XML文件
/// </summary>
/// <param name="path">XML路径</param>
///
public void CreateXML(string path)
{
if (!System.IO.File.Exists(path))
{
XmlTextWriter writer = new XmlTextWriter(path, null);
writer.Formatting = Formatting.Indented; //缩进格式
writer.Indentation = 4;
writer.WriteStartDocument();
writer.Flush();
writer.Close();
}
}
/// <summary>
/// 利用这个可以获得一个连接数据库数组[6],打开Bll.xml用
/// 得到配置文件连接数据库字符串
/// </summary>
/// <param name="path"></param>
/// <param name="s"></param>
public static void ReadBll_SqlCon(string path ,ref string[] strCon)
{
if(strCon==null)
strCon=new string[6];
System.Xml.XmlDocument xmldoc = new System.Xml.XmlDocument();
xmldoc.Load(path);
System.Xml.XmlNodeReader xmlnoderd=new System.Xml.XmlNodeReader(xmldoc);
string s = "";
int i=0;
while (xmlnoderd.Read())
{
switch (xmlnoderd.NodeType)
{
case System.Xml.XmlNodeType.Element:
break;
case System.Xml.XmlNodeType.Text:
if (s.Equals("Name"))
{
}
else
{
s = xmlnoderd.Value;
System.Windows.Forms.TreeNode node = new System.Windows.Forms.TreeNode(s);
strCon[i]=s;
i++;
}
break;
}
}
}
/// <summary>
///
/// </summary>
/// <param name="path"></param>
/// <param name="TreeView1"></param>
public static void ReadXmlData(string path,ref System.Windows.Forms.TreeView TreeView1)
{
if(TreeView1==null)
TreeView1=new System.Windows.Forms.TreeView();
System.Xml.XmlDocument xmldoc = new System.Xml.XmlDocument();
xmldoc.Load(path);
System.Xml.XmlNodeReader xmlnoderd=new System.Xml.XmlNodeReader(xmldoc);
string s = "";
while (xmlnoderd.Read())
{
switch (xmlnoderd.NodeType)
{
case System.Xml.XmlNodeType.Element:
{
//s = "<"+System.Xml.XmlNodeType.Text.ToString()+">"+xmlnoderd.Value+"</"+System.Xml.XmlNodeType.Text.ToString()+">";
//System.Windows.Forms.TreeNode node = new System.Windows.Forms.TreeNode(System.Xml.XmlNodeType.Element.ToString());
//TreeView1.Nodes.Add(node);
}
break;
case System.Xml.XmlNodeType.Text:
if (s.Equals("Name"))
{
//s = "<"+xmlnoderd.Value+">";
//System.Windows.Forms.TreeNode node = new System.Windows.Forms.TreeNode(s);
//TreeView1.Nodes.Add(node);
}
else
{
s = xmlnoderd.Value;
System.Windows.Forms.TreeNode node = new System.Windows.Forms.TreeNode(s);
TreeView1.Nodes.Add(s);
}
break;
}
}
}
/// <summary>
/// 创建一个XML文件
/// </summary>
/// <param name="path">XML路径</param>
/// <param name="Node">XML根结名</param>
public void CreateXML(string path, string rootNode)
{
if (!System.IO.File.Exists(path))
{
XmlTextWriter writer = new XmlTextWriter(path, null);
writer.Formatting = Formatting.Indented; //缩进格式
writer.Indentation = 4;
writer.WriteStartDocument();
if (rootNode != "")
{
writer.WriteStartElement(rootNode, null);
writer.WriteEndElement();
}
writer.Flush();
writer.Close();
}
}
#endregion
#region 为XML文件创建一级或二级节点
/// <summary>
/// 在根一级增加一级XML节点
/// </summary>
/// <param name="xmldoc">XmlDocument,已经装载XML</param>
/// <param name="rootNode">根节点名称</param>
/// <param name="createNode">新产生的节点名称</param>
/// <param name="attribute">新产生的节点属性</param>
/// <returns></returns>
public XmlDocument AddOneXML(XmlDocument xmldoc, string rootNode, string createNode, string[,] attribute)
{
if (xmldoc != null && createNode!="")
{
XmlNode xmlnode = xmldoc.SelectSingleNode(rootNode);
XmlElement xe = xmldoc.CreateElement(createNode);
if (attribute != null)
{
int length = attribute.Length;
if (length > 0)
{
xe.SetAttribute("key", Guid.NewGuid().ToString());
for (int i = 0; i < length; i++)
{
xe.SetAttribute(attribute[0, i].ToString(), attribute[1, i].ToString());
}
}
}
xmlnode.AppendChild(xe);
}
return xmldoc;
}
/// <summary>
/// 在根一级增加一级XML节点
/// </summary>
/// <param name="path">路径</param>
/// <param name="rootNode">根节点名称</param>
/// <param name="createNode">新产生的节点名称</param>
/// <param name="attribute">新产生的节点属性</param>
public void AddOneXML(string path, string rootNode, string createNode, string[,] attribute,out string msg)
{
msg = "";
if (System.IO.File.Exists(path))
{
xmlDoc = new XmlDocument();
xmlDoc.Load(path);
XmlNode xmlnode = xmlDoc.SelectSingleNode(rootNode);
XmlElement xe = xmlDoc.CreateElement(createNode);
if (attribute != null)
{
int length = attribute.Length / 2;
if (length > 0)
{
xe.SetAttribute("key", Guid.NewGuid().ToString());
for (int i = 0; i < length; i++)
{
xe.SetAttribute(attribute[0, i].ToString(), attribute[1, i].ToString());
}
}
}
xmlnode.AppendChild(xe);
xmlDoc.Save(path);
}
else
{
msg = "error path;Please check your path";
}
}
/// <summary>
/// 建立有二级节点的XML
/// </summary>
/// <param name="xmldoc">XmlDocument对象,装载了XML</param>
/// <param name="rootNode">根节点名称</param>
/// <param name="createNode">新产生节点名称</param>
/// <param name="attribute">新产生节点属性</param>
/// <param name="strparent">新产生节点子节点参数</param>
/// <returns></returns>
public XmlDocument AddTwoXML(XmlDocument xmldoc, string rootNode, string createNode, string[,] attribute, string[,] strparent)
{
if (xmldoc != null && createNode != "")
{
XmlNode xmlnode = xmldoc.SelectSingleNode(rootNode);
XmlElement xe = xmldoc.CreateElement(createNode);
if (attribute != null)
{
int length = attribute.Length / 2;
if (length > 0)
{
xe.SetAttribute("key", Guid.NewGuid().ToString());
for (int i = 0; i < length; i++)
{
xe.SetAttribute(attribute[0, i].ToString(), attribute[1, i].ToString());
}
}
if (strparent != null && createNode != "")
{
// XmlNode parantNode = xe.SelectSingleNode(createNode);
int parantLength = strparent.Length / 2;
for (int i = 0; i < parantLength; i++)
{
XmlElement parantXe = xmldoc.CreateElement(strparent[0, i].ToString());
parantXe.InnerText = strparent[1, i].ToString();
xe.AppendChild(parantXe);
}
}
}
xmlnode.AppendChild(xe);
}
return xmldoc;
}
/// <summary>
/// 建立有二级节点的XML
/// </summary>
/// <param name="path">路径</param>
/// <param name="rootNode">根节点</param>
/// <param name="createNode">新产生节点名称</param>
/// <param name="attribute">新产生节点属性</param>
/// <param name="strparent">新产生节点子节点参数</param>
public void AddTwoXML(string path, string rootNode, string createNode, string[,] attribute, string[,] strparent,out string msg)
{
msg = "";
if (System.IO.File.Exists(path))//检查路径是否正确
{
xmlDoc = new XmlDocument();
xmlDoc.Load(path);
XmlNode xmlnode = xmlDoc.SelectSingleNode(rootNode);
XmlElement xe = xmlDoc.CreateElement(createNode);
if (attribute != null)
{
int length = attribute.Length / 2;
if (length > 0)
{
xe.SetAttribute("key", Guid.NewGuid().ToString());
for (int i = 0; i < length; i++)
{
xe.SetAttribute(attribute[0, i].ToString(), attribute[1, i].ToString());
}
}
if (strparent != null && createNode != "")
{
int parantLength = strparent.Length / 2;
for (int i = 0; i < parantLength; i++)
{
XmlElement parantXe = xmlDoc.CreateElement(strparent[0, i].ToString());
parantXe.InnerText = strparent[1, i].ToString();
xe.AppendChild(parantXe);
}
}
xmlnode.AppendChild(xe);
}
xmlDoc.Save(path);
}
else
{
msg = "error path;Please check your path";
}
}
#endregion
#region 删除带key的节点与其下一级的子节点
/// <summary>
/// 删除属性带key的节点,key:GUID
/// </summary>
/// <param name="xmldoc">XmlDocument对象</param>
/// <param name="rootnode">XML文件根节点</param>
/// <param name="key">GUID</param>
/// <param name="msg">返回信息</param>
///
public XmlDocument DeleteXMLNode(XmlDocument xmldoc, string rootnode, string key, out string msg)
{
msg = "";
XmlNodeList nodelist = xmldoc.SelectSingleNode(rootnode).ChildNodes;
foreach (XmlNode xmlnode in nodelist)
{
XmlElement xe = (XmlElement)xmlnode;
if (xe.GetAttribute("key") == key)
{
try
{
XmlNodeList parantlist = xe.ChildNodes;
foreach (XmlNode parantXmlNode in parantlist)
{
XmlElement xel = (XmlElement)parantXmlNode;
xel.ParentNode.RemoveChild(xel);
}
xe.ParentNode.RemoveChild(xe);
}
catch
{
msg = "error:Operate XML file error";
}
}
}
return xmldoc;
}
/// <summary>
/// 删除属性带key的节点,key:GUID
/// </summary>
/// <param name="path">XML文件路径</param>
/// <param name="rootnode">根节点</param>
/// <param name="key">key:Guid</param>
/// <param name="msg">返回的信息</param>
public void DeleteXMLNode(string path,string rootnode,string key,out string msg)
{
msg = "";
if (System.IO.File.Exists(path))
{ //先判断是否存在该文件(路径),如果存在,可以操作
xmlDoc = new XmlDocument();
xmlDoc.Load(path);
XmlNodeList xl = xmlDoc.SelectSingleNode(rootnode).ChildNodes;
foreach (XmlNode xmlnode in xl)
{
XmlElement xe = (XmlElement)xmlnode;
if (xe.GetAttribute("key") == key)
{
XmlNodeList xls = xe.ChildNodes;
foreach (XmlNode parentNode in xls)
{
XmlElement xel = (XmlElement)parentNode;
xel.ParentNode.RemoveChild(xel);
}
xe.ParentNode.RemoveChild(xe);
}
}
try
{
xmlDoc.Save(path);
}
catch (XmlException ex)
{
msg = "error:" + ex.Message;
}
}
else
{
msg = "error path:Please check your path";
}
}
#endregion
#region 更新带key的节点的属性
/// <summary>
/// 更新带key节点的属性
/// </summary>
/// <param name="xmldoc">XmlDocument对象</param>
/// <param name="rootnode">根节点</param>
/// <param name="key">key:Guid</param>
/// <param name="attribute">string[,]要更新的属性</param>
/// <param name="msg">返回的信息</param>
/// <returns></returns>
public XmlDocument UpdateXMLAttribute(XmlDocument xmldoc,string rootnode, string key,string[,] attribute, out string msg)
{
msg = "";
XmlNodeList xnl = xmldoc.SelectSingleNode(rootnode).ChildNodes;
foreach (XmlNode xn in xnl)
{
XmlElement xe = (XmlElement)xn;
if (xe.GetAttribute("key") == key)
{
if (attribute != null)
{
int length = attribute.Length / 2;
for (int i = 0; i < length; i++)
{
xe.SetAttribute(attribute[0, i].ToString(), attribute[1, i].ToString());
}
}
}
}
return xmldoc;
}
#endregion
}
}