zoukankan      html  css  js  c++  java
  • 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方法

  • 相关阅读:
    我要好offer之 二叉树大总结
    我要好offer之 字符串相关大总结
    楼层扔鸡蛋问题[转]
    Linux System Programming 学习笔记(十一) 时间
    Linux System Programming 学习笔记(十) 信号
    Linux System Programming 学习笔记(九) 内存管理
    Linux System Programming 学习笔记(八) 文件和目录管理
    Linux System Programming 学习笔记(七) 线程
    Linux System Programming 学习笔记(六) 进程调度
    APUE 学习笔记(十一) 网络IPC:套接字
  • 原文地址:https://www.cnblogs.com/FlyCat/p/2704745.html
Copyright © 2011-2022 走看看