1.写xml
using System.Xml;
public
void
wrietXml(DataSet ds,
string
path)
... {
XmlDocument xmlDoc;
XmlNode xmlNode;
XmlElement xmlElem;
//XmlElement是XmlNode,但XmlNode不能增加属性,所以一般有了XmlElement再有XmlNode
xmlDoc = new XmlDocument();
//声明
xmlNode = xmlDoc.CreateNode(XmlNodeType.XmlDeclaration, "", "");
xmlDoc.AppendChild(xmlNode);
//根元素
xmlElem = xmlDoc.CreateElement("", "TableInfo", "");
xmlDoc.AppendChild(xmlElem);
XmlNode root = xmlDoc.SelectSingleNode("TableInfo");
//root.AppendChild(xmlElem);
//结构:TableInfo/table/field
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
...{
XmlElement xe1 = xmlDoc.CreateElement("field");
string tableName = ds.Tables[0].Rows[i]["表名"].ToString();
if (tableName != "")
...{//增加table节点
xmlElem = xmlDoc.CreateElement("table");
xmlElem.SetAttribute("name", tableName);
xmlElem.SetAttribute("descript", "");
root.AppendChild(xmlElem);
}
//增加field节点
string fieldName = ds.Tables[0].Rows[i]["字段名"].ToString();
xe1.SetAttribute("name", fieldName);
xe1.SetAttribute("descript", "");
xmlElem.AppendChild(xe1);
}
xmlDoc.Save(path);
}
... {
XmlDocument xmlDoc;
XmlNode xmlNode;
XmlElement xmlElem;
//XmlElement是XmlNode,但XmlNode不能增加属性,所以一般有了XmlElement再有XmlNode
xmlDoc = new XmlDocument();
//声明
xmlNode = xmlDoc.CreateNode(XmlNodeType.XmlDeclaration, "", "");
xmlDoc.AppendChild(xmlNode);
//根元素
xmlElem = xmlDoc.CreateElement("", "TableInfo", "");
xmlDoc.AppendChild(xmlElem);
XmlNode root = xmlDoc.SelectSingleNode("TableInfo");
//root.AppendChild(xmlElem);
//结构:TableInfo/table/field
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
...{
XmlElement xe1 = xmlDoc.CreateElement("field");
string tableName = ds.Tables[0].Rows[i]["表名"].ToString();
if (tableName != "")
...{//增加table节点
xmlElem = xmlDoc.CreateElement("table");
xmlElem.SetAttribute("name", tableName);
xmlElem.SetAttribute("descript", "");
root.AppendChild(xmlElem);
}
//增加field节点
string fieldName = ds.Tables[0].Rows[i]["字段名"].ToString();
xe1.SetAttribute("name", fieldName);
xe1.SetAttribute("descript", "");
xmlElem.AppendChild(xe1);
}
xmlDoc.Save(path);
}
2.读xml
(1)利用dataset
protected
void
DropDownList1_SelectedIndexChanged(
object
sender, EventArgs e)
... {
//从xml文件中读出信息
string file = Server.MapPath("Images") + "/info.xml";
DataSet ds = new DataSet();
//xml文件读到dataset中
ds.ReadXml(file);
DataView dv = new DataView(ds.Tables[1]);
//对dataview进行简单的查询
dv.RowFilter = "table_Id = " + DropDownList1.SelectedItem.Value;
DropDownList2.DataSource = dv;
DropDownList2.DataTextField = "name";
DropDownList2.DataValueField = "name";
DropDownList2.DataBind();
DropDownList2.Items.Insert(0, new ListItem("--请选择字段--","-1"));
}
... {
//从xml文件中读出信息
string file = Server.MapPath("Images") + "/info.xml";
DataSet ds = new DataSet();
//xml文件读到dataset中
ds.ReadXml(file);
DataView dv = new DataView(ds.Tables[1]);
//对dataview进行简单的查询
dv.RowFilter = "table_Id = " + DropDownList1.SelectedItem.Value;
DropDownList2.DataSource = dv;
DropDownList2.DataTextField = "name";
DropDownList2.DataValueField = "name";
DropDownList2.DataBind();
DropDownList2.Items.Insert(0, new ListItem("--请选择字段--","-1"));
}
(2)使用xml命名空间
using
System.Xml;
private void button1_Click( object sender, EventArgs e)
... {
XmlDocument doc = new XmlDocument();
doc.Load("../../XML/Expenses1.xml");
//XmlNodeList elemList = doc.GetElementsByTagName("fourth");
XmlNode foundnode = doc.SelectSingleNode("root");
//所有节点放在sList
Stack sList = new Stack(); //Stack变量本来就是指针
int xLevel = 0;
AllNodes(foundnode, 0, 1, ref xLevel, sList);
}
private int AllNodes(XmlNode root, int i, int j, ref int xLevel, Stack sList)
... {//将所有节点放到队列中,并记录其信息
//root:树根 i:以root为根的树拥有的叶子节点数,叶子节点为0 j:表示处于树的第几层 xLevel:树的高度 sList:用来存放树中所有节点的堆栈
if (!root.HasChildNodes)
...{//叶节点
node n1;
n1.n = root;
n1.i = i;
n1.j = j;
sList.Push(n1);//qList.Enqueue(n1);
if (j > xLevel) xLevel = j;
return 1;
}
else
...{//非叶节点
XmlNode x = root.LastChild;//XmlNode x = root.FirstChild;
while (x != null)
...{
i += AllNodes(x, 0, j+1, ref xLevel, sList);
x = x.PreviousSibling;//x = x.NextSibling;
}
node n2;
n2.n = root;
n2.i = i;
n2.j = j;
sList.Push(n2);//qList.Enqueue(n2);
return i;
}
}
private void button1_Click( object sender, EventArgs e)
... {
XmlDocument doc = new XmlDocument();
doc.Load("../../XML/Expenses1.xml");
//XmlNodeList elemList = doc.GetElementsByTagName("fourth");
XmlNode foundnode = doc.SelectSingleNode("root");
//所有节点放在sList
Stack sList = new Stack(); //Stack变量本来就是指针
int xLevel = 0;
AllNodes(foundnode, 0, 1, ref xLevel, sList);
}
private int AllNodes(XmlNode root, int i, int j, ref int xLevel, Stack sList)
... {//将所有节点放到队列中,并记录其信息
//root:树根 i:以root为根的树拥有的叶子节点数,叶子节点为0 j:表示处于树的第几层 xLevel:树的高度 sList:用来存放树中所有节点的堆栈
if (!root.HasChildNodes)
...{//叶节点
node n1;
n1.n = root;
n1.i = i;
n1.j = j;
sList.Push(n1);//qList.Enqueue(n1);
if (j > xLevel) xLevel = j;
return 1;
}
else
...{//非叶节点
XmlNode x = root.LastChild;//XmlNode x = root.FirstChild;
while (x != null)
...{
i += AllNodes(x, 0, j+1, ref xLevel, sList);
x = x.PreviousSibling;//x = x.NextSibling;
}
node n2;
n2.n = root;
n2.i = i;
n2.j = j;
sList.Push(n2);//qList.Enqueue(n2);
return i;
}
}