XML
创建XML文档
// 1.创建一个XML文档对象
XmlDocument doc = new XmlDocument();
// 2.创建第一行描述信息
XmlDeclaration dec = doc.CreateXmlDeclaration("1.0","utf-8",null);
// 3.将创建的第一行数据添加到文档中
doc.AppendChild(dec);
// 4.给文档添加根节点
XmlElement book = doc.CreateElent("Books");
// 5.将根节点添加给文档对象
doc.AppendChild(book);
// 6.给根节点添加子节点
XmlElement book1 = doc.CreateElent("Book");
// 将子节点book1添加到根节点下
books.AppendChild(book1);
// 7.给book1添加子节点
XmlElement bookName1 = doc.CreateElement("BookName");
// 8.设置标签中显示的文本
bookName1.InnerText = "水浒传";
book1.AppendChild(bookName1);
DOM方式创建XML文档对象
XmlDocument doc = new XmlDocument();
XmlDeclaration dec = doc.CreateXmlDeclaration("1.0","utf-8",null);
doc.AppendChild(dec);
XmlElement order= doc.CreateElent("Order");
doc.AppendChild(order);
XmlElement customerName= doc.CreateElent("CustomerName");
customerName.InnerXml = "小猫";
// 添加节点的属性
customerName.setAttribute("ID","0101");
order.AppendChild(customerName);
文档对象模型
List<Student> list = new List<Student>();
list.Add(new Student() { ID = 1, Name = "小猫", Age="30" });
XmlDocument doc = new XmlDocument();
XmlDeclaration dec = doc.CreateXmlDeclaration("1.0","utf-8",null);
doc.AppendChild(dec);
XmlElement person= doc.CreateElent("Person");
doc.AppendChild(person);
// 通过循环List集合,所有对象,以节点的形式添加到XML文档中
for(int i = 0; i < list.Count; i++)
{
XmlElement student = doc.CreateElement("Student");
student.SetAttribute("studentID", list[i].ID.ToString());
XmlElement name= doc.CreateElement("Name");
name.InnerXml = list[i].Name;
XmlElement age= doc.CreateElement("Age");
age.InnerXml = list[i].Age.ToString();
person.AppendChild(student);
student.AppendChild(name);
student.AppendChild(age);
}
XML文档的增删改查
XmlDocument doc = new XmlDocument();
if(File.Exists("Student.xml"))
{
//加载文件
doc.Load("Student.xml");
//获得根节点
XmlElement person = doc.DocumentElement;
}
else
{
//不存在
XmlDeclaration dec = doc.CreateXmlDeclaration("1.0","utf-8",null);
doc.AppendChild(dec);
XmlElement order= doc.CreateElent("Order");
doc.AppendChild(order);
}
XmlDocument doc = new XmlDocument();
doc.Load("order.xml");
// 获得根节点
XmlElement order = doc.DocumentElement;
// 获得根节点下面的所有子节点
XmlNodeList xnl = order.ChildNodes;
foreach (XmlNode item in xnl)
{
Console.WriteLine(item.InnerText);
}
使用XPath的方式来读取XML文件
XmlDocument doc = new XmlDocument();
doc.Load("order.xml");
// 获得根节点
XmlElement order = doc.DocumentElement;
XmlNode xn = order.SelectSingleNode("/Order/CustomerName[@Name='雨衣']");
委托
public delegate string DelProStr(string str);
static void ProString(string[] names,DelProStr del)
{
for(int i = 0; i < names.Lenght; i++)
{
names[i] = names[i].ToLower();
}
}
ProString(names, (name) => { return name.ToUpper(); });
泛式委托
static T GetMax<T> (T[] nums, DelCompare<T> del)
{
T max = nums[0];
for(int i = 0; i < nums.Length; i++)
{
if(del(max, nums[i]) < 0)
{
max = nums[i];
}
}
return max;
}
多播委托
public delegate void DelTest();
DelTest del = Test1;
del += Test2;
del += Test3;
del += Test4;
del -= Test2;
del();
static void Test1(){}
static void Test2(){}
static void Test3(){}
static void Test4(){}
定义事件
- 语法:访问修饰符 event 委托名称 事件名称;
- 定义事件
public delegate void delTest;
public event delTest eventTest;
- 注册事件
eventTest += new delTest(method1);
eventTest += new delTest(method2);
委托与事件总结
- 委托的作用:占位,在不知道将来要执行的方法的具体代码时,可以先用委托变量来代替方法调用(委托的返回值,参数列表要确定).在实际调用之前,需要为委托赋值,否则为null.
- 事件的作用:事件的作用与委托变量一样,只是功能上比委托变量有更多的限制.(比如:1.只能通过+=或-=来绑定方法(事件处理程序) 2.只能在类内部调用(触发)事件)
网友评论