XDocument,XElement类:
分别代表了XML文档和XML元素,都继承了抽象基类XContainer,调用load可以载入不同存储方式的xml内容并生成文档或元素实例类,静态方法Parse可以直接解析字符串为xml
Elements,Descendants方法都是返回指定名字的元素集合,不同的是Elements方法返回的是查找当前元素的子元素,Descendants会继续查找所有子节点
XmlConvert类:
EncodeName或EncodeNmToken可以编码不合法节点名为合法的,如:
XmlConvert.EncodeNmToken("s d")的结果为"s_x0020_d",其中的空格被编码成了_x0020_
XAttribute类:
XML属性示例,可以放入任何XContainer中
NextAttribute和PreviousAttribute属性分别用于获取父元素的相邻元素
XNode类:
是众多X*类的基类,提供节点插入替换等操作
XNamespace,XName类:
用于定义命名空间和节点名(tag),XNamespace和String联合体会产生一个新的Xname,ToString方法会返回"{命名空间}tag名"的字符串,该解析字符串成为扩展名称;
当给元素设置XName时会自动处理命名空间声明,也可以直接设置扩展名称格式的字符串,但是这样的开销会比显示声明的XNamespace开销更大
定义前缀方法:
XElement node = new XElement(ns + "name", new XAttribute(XNamespace.Xmlns + "c", ns), "jack");
//输出<c:name xmlns:c="www.tt.com">jack</c:name>
XStreamingElement类:
用于延迟表达式求值,使XML元素在使用时值才被求出,类似Ling表达式的延迟求值,该类代表一个IEnumerable<T>目录树,当读取大量集合数据时,结合XmlReader能够保持一个较小的内存占用(因为不是一次全部载入,IEnumerable<T>迭代载入)
用法:
static IEnumerable<XElement> ChunkedDataSourceReader(String uri, String chunkElement) { XmlReaderSettings settings = new XmlReaderSettings();
settings.XmlResolver = new XmlSecureResolver(new XmlUrlResolver(), "C:\\sources"); settings.MaxCharactersInDocument = (1024 * 1024) * 4; // MAX 4MB XmlReader xr = XmlReader.Create(uri, settings); while (xr.Read()) { if ((xr.NodeType == XmlNodeType.Element) && (xr.Name == chunkElement)) { // For debugging and demo purposes only Console.WriteLine("Reading a chunk element from data source"); yield return XElement.ReadFrom(xr) as XElement; } } } static void Main(string[] args) { var customers = ChunkedDataSourceReader(@"CustomersWithOrders.xml","customer"); XStreamingElement xmlCustomers = new XStreamingElement("customers", customers); xmlCustomers.Save(@"Output.xml"); }
customers是一个集合,如果new XStreamingElement("customers", customers.ToList());就无法利用该类特特性,因为整个数据源就载入了内存
通用方法:
AddAnnotation方法:添加批注,可以使任意类型,和XMLInfoset无关
用法:
node.AddAnnotation("A1"); node.AddAnnotation("A2"); var annos= node.Annotations<string>();//读取批注 foreach (var anno in annos) Console.WriteLine(anno);
Changed,Changing事件:通知节点改变
Validate方法:验证XML架构,System.Xml.Schema命名空间内的扩展方法,可以结合Changed事件验证改变后的XML
System.Xml.XPath命名空间有对XNode扩展的XPath方法