XML在开发中作为文件存储格式、数据交换的协议用的非常普遍,各个编程语言有都支持。W3C也制定了XML DOM的标准。在这里主要介绍下.Net中的XmlDocument,包括xml读取和写入等功能。
一、Xml的加载读取
1、数据等准备
Xml测试数据:
<?xml version="1.0" encoding="UTF-8"?>
-<CameraGroup WKT="UNKNOWNCS["unnamed"]">
<Camera duration="5" comment="" roll="-4.29374881997575E-14" tilt="-15.333841267255" heading="-50.5252574662688" z="770.962000000316" y="24483.2877865981" x="10533.2696556843" Picture="b22d08c9-59f2-4b21-a254-d7133eb1b7bb.jpg" Name="初始界面"/>
<Camera duration="5" comment="" roll="-9.54166404439055E-15" tilt="-12.2364039278614" heading="-71.2583141496969" z="524.34103072128" y="24767.3735196134" x="10161.8880158652" Picture="6c7e6098-6064-401c-93c0-dce573f86b5d.jpg" Name="分区1"/>
</CameraGroup>
读取的数据,我们定义了一个实体类LocationCamera,用来保存Xml解析后的数据:
public class LocationCamera
    {
        public LocationCamera()
        {
        }
        private string name;
        public string Name
        {
            get { return name; }
            set { name = value; }
        }
        private int duration;
        public int Duration
        {
            get { return duration; }
            set { duration = value; }
        }
        private double roll;//="-4.29374881997575E-14"
        public double Roll
        {
            get { return roll; }
            set { roll = value; }
        }
        private double tilt;//="-15.333841267255"
        public double Tilt
        {
            get { return tilt; }
            set { tilt = value; }
        }
        private double heading;//="-50.5252574662688"
        public double Heading
        {
            get { return heading; }
            set { heading = value; }
        }
        private double z;//="770.962000000316"
        public double Z
        {
            get { return z; }
            set { z = value; }
        }
        private double y;//="24483.2877865981"
        public double Y
        {
            get { return y; }
            set { y = value; }
        }
        private double x;//="10533.2696556843"
        public double X
        {
            get { return x; }
            set { x = value; }
        }
    }
2、Xml读取
a、Xml加载
Xml是个标准,对于用该标准存取的内容可以来自文件、内部串或者二进制流,所以对于Xml的加载有这么几种:
加载xml文件
Load(string filename); 
加载xml流
Load(Stream inStream); 
加载xml字符串
LoadXml(string xml); 
b、Xml元素读取
XmlDocument支持使用xpath表达式选择文档中节点,方法:
SelectNodes(String expression)
SelectSingleNode(string expression)
SelectNodes 返回符合expression表达式的所有元素,返回值为XmlNodeList,比如本例子是通过XmlNodeList nodelist = xmlDoc.SelectNodes("/CameraGroup/Camera");获取所有的Camera节点。
SelectSingleNode只返回第一个符合expression表达式的节点,如果没有返回null值。
返回的XmlNodeList,我们可以通过循环读取,对于单个XmlNode,我们通过Attributes获取属性值。
读取的完整代码如下:
 public static Hashtable getCameraXml(string path)
        {
            Hashtable hashtable = new Hashtable();           
            if (File.Exists(path))
            {
                XmlDocument xmlDoc = new XmlDocument();
//xml来自本地文件
                xmlDoc.Load(path);
                if (xmlDoc != null)
                {
//获取所有的Camera节点
                    XmlNodeList nodelist = xmlDoc.SelectNodes("/CameraGroup/Camera");
//遍历节点获取节点属性,并保存在LocationCamera类中
                    foreach (XmlNode node in nodelist)
                    {
                        LocationCamera locationCamera = new LocationCamera();
                        locationCamera.Name=node.Attributes["Name"].Value.ToString();
                        locationCamera.Roll=System.Convert.ToDouble(node.Attributes["roll"].Value.ToString());
                        locationCamera.Tilt = System.Convert.ToDouble(node.Attributes["tilt"].Value.ToString());
                        locationCamera.Heading = System.Convert.ToDouble(node.Attributes["heading"].Value.ToString());
                        locationCamera.X = System.Convert.ToDouble(node.Attributes["x"].Value.ToString());
                        locationCamera.Y = System.Convert.ToDouble(node.Attributes["y"].Value.ToString());
                        locationCamera.Z = System.Convert.ToDouble(node.Attributes["z"].Value.ToString());
                        hashtable.Add(locationCamera.Name, locationCamera);
                        Console.WriteLine(node.OuterXml);
                    }                   
                    return hashtable;
                }
            }
            return null;
        }
SelectNodes、SelectSingleNode也可以读取指定属性值的节点,比如XmlNodeList nodelist = xmlDoc.SelectNodes("/CameraGroup/Camera[@Name='分区1']");表示读取Name为"分区1"的所有节点。
二、Xml创建的写入
写入内容主要包括xml声明、根节点、子节点及节点属性。生成的Xml文件和代码如下:
<?xml version="1.0"?>
-<CameraGroup WKT="UNKNOWNCS["unnamed"">
<Camera X="112.42342" Name="分区1"/>
</CameraGroup>
写入的代码:
public static void writeCameraXml(string path)
        {
            XmlDocument xmlDoc = new XmlDocument();
            //创建Xml声明部分,即<?xml version="1.0" encoding="utf-8" ?>
            xmlDoc.CreateXmlDeclaration("1.0", "utf-8", "yes");
            //创建CameraGroup根节点
            XmlNode rootNode = xmlDoc.CreateElement("CameraGroup");
            //创建WKT属性
            XmlAttribute wktAttribute = xmlDoc.CreateAttribute("WKT");
            wktAttribute.Value = "UNKNOWNCS[\"unnamed\"";
            //为根节点添加属性
            rootNode.Attributes.Append(wktAttribute);
            //创建Camera子节点
            XmlNode cameraNode = xmlDoc.CreateElement("Camera");
            //创建Name属性
            XmlAttribute nameAttribute = xmlDoc.CreateAttribute("Name");
            nameAttribute.Value = "分区1";
            //为Camera添加属性
            cameraNode.Attributes.Append(nameAttribute);
            //创建X属性
            XmlAttribute xAttribute = xmlDoc.CreateAttribute("X");
            xAttribute.Value = "112.42342";
            //为Camera添加X属性
            cameraNode.Attributes.Append(xAttribute);
            //为根节点CameraGroup添加Camera子节点
            rootNode.AppendChild(cameraNode);
            //为Xml文档添加根元素
            xmlDoc.AppendChild(rootNode);
            //保存Xml文件
            xmlDoc.Save(path);//path为:@"d:\anxiuyun.xml"
        }

C#下使用XmlDocument详解相关推荐

  1. python怎么读文件夹下的文件夹-python如何获取当前文件夹下所有文件名详解

    前言 本文主要给大家介绍了关于python获取当前文件夹下所有文件名的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧 os 模块下有两个函数: os.walk() os.li ...

  2. linux下dd命令详解

    linux下dd命令详解    名称: dd 使用权限: 所有使用者dd 这个指令在 manual 里的定义是 convert and copy a file 使用方式: dd [option] 如果 ...

  3. linux vsftpd用法,Linux_LINUX系统下vsftpd 命令详解,FTP命令是Internet用户使用最频 - phpStudy...

    LINUX系统下vsftpd 命令详解 FTP命令是Internet用户使用最频繁的命令之一,不论是在DOS还是UNIX操 作系统下使用FTP,都会遇到大量的FTP内部命令. 熟悉并灵活应用FTP的内 ...

  4. Windows 下OpenSSL 安装详解 +图解

    Windows 下OpenSSL 安装详解 +图解 转载于:https://www.cnblogs.com/zhujiabin/p/5088646.html

  5. linux下scp命令详解

    http://www.cnblogs.com/xuxm2007/archive/2010/08/04/1792179.html linux下scp命令详解 http://www.9usb.net/20 ...

  6. MFC下CSocket编程详解

    MFC下CSocket编程详解:  1. 常用的函数和注意事项(详细的函数接口说明请查看MSDN): CSocket::Create 初始化(一般写服务器程序都不要用为好,用下面的 CSocket:: ...

  7. C#环境下的钩子详解

    C#环境下的钩子详解 摘自网上供自己备查: http://www.csharpwin.com/csharpspace/2423.shtml 1. WINDOWS的消息机制 2. HOOK介绍 3. H ...

  8. linux下tree命令详解

    From:http://blog.163.com/ly_89/blog/static/186902299201161302812880/ linux下tree命令详解---linux以树状图逐级列出目 ...

  9. Linux下top命令详解

    Linux下top命令详解 top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器.top是一个动态显示过程,即可以通过用户按键来不断刷 ...

最新文章

  1. STM32中printf重定向到串口
  2. JavaScript学习记录 (三) 函数和对象
  3. boot loader:Grub
  4. 产品经理如何在技术人员面前更有说服力?
  5. 工作心得之-------关于“表现”
  6. message from server: Host 'XXXX' is not allowed to connect to this MySQL server
  7. java ee web高级,Java EE Web高级开发案例
  8. linux文件管理和 对bash的理解
  9. android查看存储占用,Android获取App内存使用情况的方法
  10. 《面向对象程序设计课程学习进度条》
  11. java 基本类型 线程安全_java的基本类型和i++线程安全性的深入解析
  12. Docker安装+镜像拉取+容器+创建镜像+push to docker hub
  13. oracle dbms_crypto,DBMS_CRYPTO包对Oracle加密
  14. ORACLE多条件的统计查询(case when)
  15. vc10的C2664和C2065错误
  16. 初学cesium时的一些笔记,过于潦草看看就好
  17. movie制作的电影站wordpress视频主题
  18. JavaSE_05【数组】拓展练习
  19. 用一个div绘制背景流动网格特效
  20. TP5之微信小程序推送模板消息

热门文章

  1. python vs C++ 谁更快
  2. 三菱Q系列PLC批量读取软元件
  3. u盘启动linux3.0,5分钟打造U盘启动的Ubuntu (3篇)
  4. 【Windows】查看笔记本电池寿命/损耗度(查看电池使用时间报告)
  5. delphi获得笔记本的电池状态(剩余百分比,状体,剩余事件,电池总使用时间)
  6. Segment Anything论文阅读笔记
  7. 51单片机 普中V2 交通灯 根据实物仿真
  8. 谈谈iOS 的加密技术
  9. 从头安装配置manjaro操作系统
  10. win7旗舰版安装sql2000