C#下使用XmlDocument详解
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"
}
---------------------
本文来自 凡梦_ 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/mpegfour/article/details/78550228?utm_source=copy
C#下使用XmlDocument详解的更多相关文章
- Linux下ps命令详解 Linux下ps命令的详细使用方法
http://www.jb51.net/LINUXjishu/56578.html Linux下的ps命令比较常用 Linux下ps命令详解Linux上进程有5种状态:1. 运行(正在运行或在运行队列 ...
- Linux下rar命令详解
Linux下rar命令详解 用法: rar <命令> -<选项1> ….-<选项N> < 操作文档> <文件…> <@文件列表…> ...
- linux下tar命令详解
linux下tar命令详解 tar是Linux环境下最常用的备份工具之一.tar(tap archive)原意为操作磁带文件,但基于Linux的文件操作机制,同样也可适用于普通的磁盘文件.ta ...
- 在telnet下操作memcache详解(操作命令详解)
这篇文章主要介绍了在telnet下操作memcache详解,telnet下的memcache操作命令详解,需要的朋友可以参考下 在定位问题.测试等时候经常需要对memcache的数据进行一些操作,但是 ...
- [r]Ubuntu Linux系统下apt-get命令详解
Ubuntu Linux系统下apt-get命令详解(via|via) 常用的APT命令参数: apt-cache search package 搜索包 apt-cache show package ...
- Linux下chkconfig命令详解(转)
Linux下chkconfig命令详解 chkconfig命令主要用来更新(启动或停止)和查询系统服务的运行级信息.谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接. ...
- Linux知识积累(4) Linux下chkconfig命令详解
Linux下chkconfig命令详解 chkconfig命令主要用来更新(启动或停止)和查询系统服务的运行级信息.谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接. ...
- Linux下top命令详解
Linux下top命令详解 top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器.top是一个动态显示过程,即可以通过用户按键来不断刷 ...
- CentOS下rpm命令详解
CentOS下rpm命令详解 rpm,Redhat Package Manager,即为红帽公司为RHEL开发的专用包管理器,后来更改为RPM Package Manager,类似于GNU项目,使用递 ...
随机推荐
- Go pprof和火焰图
Profiling 在计算机性能调试领域里,profiling 就是对应用的画像,这里画像就是应用使用 CPU 和内存的情况.也就是说应用使用了多少 CPU 资源?都是哪些部分在使用?每个函数使用的比 ...
- 数据序列化导读(2)[YAML]
上一节讲了JSON, 这一节将介绍YAML.可以认为,YAML是JSON的超集,但是更加简单易用,适合人类阅读和书写. 1. 什么是YAML? YAML是YAML Ain't Markup Lang ...
- kendo UI 入门
Kendo UI 是一套前端开发宽假,意为日本的“剑道” 首先到官方网站下载最新的30天试用版,地址为:http://www.telerik.com/download/kendo-ui 需要简单注册一 ...
- java编程常用的快捷键
Eclipse 常用快捷键 Eclipse的编辑功能非常强大,掌握了Eclipse快捷键功能,能够大大提高开发效率.Eclipse中有如下一些和编辑相关的快捷键. 1. [ALT+/] 此快捷键为用户 ...
- mysql/mariadb 数据库配置
1. 启动mariadb systemctl start mariadb 2. 设置开机启动mariadb systemctl enable mariadb 一.修改用户密码,以root为例 1. ...
- highcharts绘制股票k线
借助highcharts绘制股票k线: 后台通过websocket没个一定时间下发最新数据,然后重新绘制k线; 开发文档: https://api.highcharts.com/highcharts/ ...
- vue2.x中请求之前数据显示以及vuex缓存的问题
在项目中遇到两个问题,简单的做个笔记来记录自己解决的问题,可能不是很好的处理办法,欢迎提出,自己还在不断优化中... 第一个是vue在加载页面的时候,会先加载静态资源,这个时候数据还没有请求回来,用户 ...
- java 使用 pdf.js 在线查看 pdf 文档
1. 下载对应的 pdf.js 文件: 推荐地址: https://github.com/mozilla/pdf.js/ http://mozilla.g ...
- [转]C#进阶系列——WebApi 接口参数不再困惑:传参详解
本文转自:http://www.cnblogs.com/landeanfen/p/5337072.html#_label1_2 阅读目录 一.get请求 1.基础类型参数 2.实体作为参数 3.数组作 ...
- tap 和click 事件区别
clike事件和 Zepto.js 中tap的区别 首先介绍下Zepto: 最初是作为移动端开发的库,但是却可以作为JQuery轻量级的替代品,因为API和JQuery相似,而文件更小. 介绍下tap ...