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

  • 相关阅读:
    python基础——协程
    Python基础并发编程——进程
    Python基础并发编程——操作系统
    python基础——socket
    Python基础——网络编程
    文件操作
    深浅拷贝和流程控制
    数据类型
    基础知识
    session和cookie
  • 原文地址:https://www.cnblogs.com/FlyCat/p/2704745.html
Copyright © 2011-2022 走看看