• XML


    XML是一种简单数据存储语言,以文本的形式将数据存储到文件。

    XML文件结构

    • XML声明<?xml version="1.0" encoding="utf-8"?>包括版本和编码声明
    • XML元素 <开始>结束为一个元素,包括名称和属性,也可包括子元素(开始节点和结束节点中)。
    • XML节点:一个抽象概念,xml组成一棵树,每个节点有名称和类型

    通过流操作XML

    既然xml以文本保存在文件中,可以通过字符流操TextWriter作文件。当然方便操作xml文档结构提供了XmlTextWriter,XmlTextReader。这里设计到文件流的操作,对于写入流:内存为流的源,硬盘文件为流的目的地。

    		using (XmlTextWriter writer = new XmlTextWriter(@"E:MyBook.xml", Encoding.UTF8))
    			{
    				//声明xml为1.0
    				writer.WriteStartDocument();
    				writer.WriteStartElement("MyBook");
    				writer.WriteAttributeString("id", "1");
    				writer.WriteAttributeString("name", ".Net Core");
    				writer.WriteElementString("description", ".net 跨平台开发");
    				writer.WriteEndElement();
    			}
    

    通过流读取文件

    			using (XmlTextReader reader = new XmlTextReader(@"E:MyBook.xml"))
    			{
    				//逐个节点遍历
    				while (reader.Read())
    				{
    					//读取节点
    					string node =reader.Name;
    					string attribute = reader.GetAttribute("name");
    				}
    			}
    

    XmlDocument将文件读取到内存中

    通过流操作xml很不方便,尤其对于查找和更改操作。XmlDocument实现是通过将xml文件以对于的形式加载到内存中,再直接操作内存中的xml数据,最后通过保存更改文档内容。
    同大多数文档操作一样通过Load将数据加载到内存,Save将内存数据写入文件(Word和Excel虽然复杂原理应该一样)

    string xmlPath = @"E:MyBook.xml";
    XmlDocument doc = new XmlDocument();
    doc.Load(xmlPath);
    XmlNode node = doc.SelectSingleNode("MyBook/book");
    string nodename =node.Attributes["name"].InnerText;
    
    if(node.NodeType == XmlNodeType.Element)
    {
        XmlElement element = (XmlElement)node;
        element.SetAttribute("name", "Hello");
    }
    doc.Save(xmlPath);
    

    Linq XML

    为更方便的查找xml数据,将xml文件以XElement对象的形式加载到内存,因XElement操作更简单支持Linq查询

    XDocument xdoc = XDocument.Load(xmlPath);
    var result = from ele in xdoc.Descendants("book")
                    where ele.Attribute("name").Value == ".Net Core"
                    select ele;
    
  • 相关阅读:
    window C/C++ 简单的IDE编译器
    ubuntu 安装 lamp
    架构设计
    linux 性能分析
    wifi基本原理
    openwrt 编译
    学习笔记day5:inline inline-block block区别
    脱离原来文档流产生浮动框
    meta标签清理缓存
    百度web前端面试2015.10.18
  • 原文地址:https://www.cnblogs.com/LoveTomato/p/9118213.html
Copyright © 2020-2023  润新知