C#下使用XmlDocument详解

C#下使用XmlDocument详解XML在开发中作为文件存储格式、数据交换的协议用的非常普遍,各个编程语言有都支持。W3C也制定了XMLDOM的标准。在这里主要介绍下.Net中的XmlDocument,包括xml读取和写入等功能。一、Xml的加载读取1、数据等准备Xml测试数据:-读取的数据,我们定义了一个实体类LocationCamera,用来保存Xml解析后的数据:public

大家好,又见面了,我是你们的朋友全栈君。

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”
        }


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/150724.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • spgwr | R语言与地理加权回归(Ⅰ-1):线性地理加权回归[通俗易懂]

    spgwr | R语言与地理加权回归(Ⅰ-1):线性地理加权回归[通俗易懂]地理加权回归(GeographicallyWeightedRegression,GWR)经过多年发展,已经具备了多种形式,在R语言中也对应着多个工具包,其中spgwr是一个开发较早、…

  • linux c语言xml解析xml,纯C语言XML解析器

    linux c语言xml解析xml,纯C语言XML解析器精短高效的XML解析器,纯C单一程序,应用于银行的国税库行横向联网接口系统中,稳定可靠,运行速度飞快,非相应的JAVA程序可比.以下为大部分源码:/*Copyright(c)2005wzs*/#include#include#include#include#include#include”xmlparse.h”/*xml得到节点名值,返回:1节点标识名开头,2节点标…

  • Pytest(17)运行未提交的git(pytest-picked)

    Pytest(17)运行未提交的git(pytest-picked)前言我们每天写完自动化用例后都会提交到git仓库,随着用例的增多,为了保证仓库代码的干净,当有用例新增的时候,我们希望只运行新增的未提交git仓库的用例。pytest-picked插件可以

  • PyCharm专业版的安装[通俗易懂]

    PyCharm专业版的安装[通俗易懂]本教程只适合Windows1.首先到官网下载PyCharm专业版:http://www.jetbrains.com/pycharm/download/#section=windows2.双击打开后开始安装这里选择你所安装的目录这里选择创建桌面快捷方式以及关联.py文件静静等待安装:这里选择运行PyCharm 然后单机Finish:

  • abstractmethoderror:某方法_error parse true

    abstractmethoderror:某方法_error parse trueAbstractMethodError:Thisjava.lang.AbstractMethodErrorisusuallythrownwhenwetrytoinvokethe

  • nginx负载均衡算法8种_权重负载均衡算法实现

    nginx负载均衡算法8种_权重负载均衡算法实现Nginx是一个很强大的高性能Web和反向代理服务,它具有很多非常优越的特性:在连接高并发的情况下,Nginx是Apache服务不错的替代品:Nginx在美国是做虚拟主机生意的老板们经常选择的软件平台之一。能够支持高达50,000个并发连接数的响应,感谢Nginx为我们选择了epollandkqueue作为开发模型。下面是五种负载均衡算法:roundrobin(默认) weight IP_hash url_hash(第三方) fair(第三方)1.roundr…

    2022年10月12日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号