.Net高级技术:XML的读写操作

一、XML的特点

XML和HTML的区别:XML中元素必须关闭;XML中元素的属性值必须用引号; XML大小写敏感(CaseSensitive)

二、XML的读写技术(LINQ TO XML)

读:

XDocument doc = XDocument.Load(reader),加载XML文件,XDocument就是加载的对象
解析订单号:doc.Root.Element("OrderNumber").Value
遍历订单项:
foreach (XElement element in doc.Root.Descendants("Items").Descendants("OrderItem"))
{
Console.WriteLine("商品名:{0},数量:{1}", element.Element("ItemName").Value, element.Element("Count").Value);
}
读取属性,Attribute(""),读取带属性的订单
foreach (XElement element in doc.Root.Descendants("Items").Descendants("OrderItem"))
{
Console.WriteLine("商品名:{0},数量:{1}", element.Attribute("Name").Value, element.Attribute("Count").Value);
}
使用Linq来进行XML的操作(*),代码见备注
手写XML来读,这样锻炼手写XML的能力。

 

写:

读写XML有很多技术,Dom、Sax等,还有高级的读写技术XmlSerializer、 Linq To XML(System.Xml.Linq)、 System.Xml(XMLDocument)等, XmlSerializer要求对每种不同的文件都定义一套类,很麻烦,而Linq To XML则不需要单独创建类,当然更底层一些,代码比XmlSerializer多,灵活性更高。System.Xml下的类是2.0及之前操作xml推荐的,现在很多人也仍然在用这个namespace下的类,这个namespace下的类和Linq To XML非常相似,因此不用单独学。
核心类XElement,一个XElement表示一个节点,new XElement("Order"),创建一个名字为Order的标签,调用Add增加子节点,也是XElement 对象,和TreeView一样。
想得到字符串怎么办?ToString
调用XElement的Save方法将xml内容保存在Writer中

 

补充:

<!--fffff-->是注释(Comment),<connectionStrings>是元素(Element),他们都是节点(Node)。因为Nodes返回的即可能是注释,也可能是元素,所以只能返回Node类型。
xdoc.Elements()//只返回元素
xdoc.Nodes()返回所有节点(包括注释等。)
//Descendants()在子孙后代中找标签名为DefaultTask的元素
//慎用,容易取错结点
//var task = xdoc.Descendants("DefaultTask").Single();

 

XmlDocument(比较旧的XML解析方式)
XPath
Namespace
Schema、DTD:在App.Config中“转到定义”会看到文件的定义约束文件,DTD约束能有哪些属性、能有哪些元素。

 

三、泛型

1.泛型类

class Program
{
static void Main(string[] args)
{
Person<string, int> p = new Person<string, int>();
p.Name = "Tom";
p.Age = 20;
Console.WriteLine(p.Name+":"+p.Age);
Console.ReadKey();
}
}

class Person<N,A>
{
public N Name {set;get; }
public A Age { set; get; }
}

2.泛型方法

static void Main(string[] args)
{
string res= TestMethod<string, string>("111","2222");
Console.WriteLine(res);
Console.ReadKey();
}

static T2 TestMethod<T1, T2>(T1 t1,T2 t2)//T1表示傳入類型,T2表示返回值類型
{
return t2;
}

3.泛型委托

static void Main(string[] args)
{
Func<string> f1 = Fun1;//系统定义的委托类型  还有Action泛型委托(没有返回值类型)
Console.ReadKey();
}

private static string Fun1()
{
throw new NotImplementedException();
}

4.泛型约束:person new()

标记泛型必须要继承某个类或者有无参构造函数等

转载于:https://www.cnblogs.com/francis-ray/p/10218661.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值