Linq to XML 基本类

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方法

原文地址:https://www.cnblogs.com/FlyCat/p/2704745.html