XML数据文件

XML数据文件技术

1.概念

可扩展标记语言 (ExtensibleMarkup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。XML 提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。

XML的简单使其易于在任何应用程序中读写数据,这使XML很快成为数据交换的唯一公共语言,虽然不同的应用软件也支持其它的数据交换格式,但不久之后他们都将支持XML,那就意味着程序可以更容易的与Windows、Mac OS, Linux以及其他平台下产生的信息结合,然后可以很容易加载XML数据到程序中并分析他,并以XML格式输出结果。

2.xml文件组成

在XML中的完整数据集就是XML文件。XML文件可以是计算机上的物理文件,或是内存中的字符串,但是其本身必须是完整的,必须遵循一定的规则。XML文件由许多不同的部分组成。其中最重要的部分就是XML元素,它包含文档的实际数据。

(1)      XML元素

Xml元素包括一个开始标记<Student>和一个结束标记</Student>,元素的名称用尖括号包围。在xml文档中区分字母的大小写,因此<Student>和<student>是两种不同的元素,此外xml元素支持中文编码如:<学生></学生>,这方便了我们的数据的读取时元素的读取。

在XML文件中只能有一个根,所以一个元素可以包含其他n个元素却不能元素的重叠(这是区别于HTML语言的),因此在父元素的结束标记之前必须关闭所有的子元素。例如下面的错误写法:

<学生>

   <姓名>张三

   <年龄>23

   </姓名></年龄>

</学生>

这样的写法是非法的,因为在<姓名>元素内打开了<年龄>元素,但是结束标记</姓名>却位于闭标记<年龄>之前。正确的写法如下:

<学生>

   <姓名>张三</姓名>

   <年龄>23</年龄>

</学生>

(2)      属性

与在元素体内存储数据一样,我们也可以在属性之内存储数据,属性被添加到元素开始标记之内属性的形式为:

Name=”value”

其中属性值必须包含在双引号内,例如:

<学生 姓名=”张三”></学生>

在xml文件中采用两种存储方式没有太大的区别,如果需要添加对后面出现的数据片段的更多说明信息,则可以选择第二种存储方式。

(3)      xml声明

除了元素和属性之外,xml文件中还包含许多组成部分(xml文档单独部分就是节点——因此元素、元素内的文本和属性都是XML文件的节点)。但是只有XML声明存在于所有的XML文件中,而且必须作为文档的第一个节点。

XML声明的格式类似于元素的格式,但是在尖括号内具有问号。它具有名称为version的属性,其惟一可能的值是“1.0”,因此简单的XML声明形式为:

<?xmlversion=”1.0”>

另外,他还可以包含编码属性(如UTF-16等)和standalone表示XML文件是否依赖于任何其他文件,但这些都不是必须的。

(4)      XML文件的结构

XML的优点之一就是相比关系数据库提供了一种结构化的组织数据的方式。我们知道像Access数据库和SQL数据库等都是在表中存储数据,表通过各列中的值而相互关联。每一个表在行和列中存储数据一一对应(每一行表示单一的记录,每一列关于该记录的特定的数据项)。相反,XML数据是分层组织的,每个XML文件必须而且只能有一个跟元素,它是所有元素和文本数据的父节点。如果在文件的顶级节点中有多个元素那么文件就不是合法的XML文件。下面的XML文件就是不合法的:

<?xmlversion=”1.0”>

<学生>张三</学生>

<学生>李思</学生>

<学生>周武</学生>

正确的写法应该是:

<?xmlversion=”1.0”>

<班级>

   <学生>张三</学生>

<学生>李思</学生>

<学生>周武</学生>

</班级>

在此根元素之下,组织数据具有更大的灵活性,不像关系数据元素包含的子元素没有限制,这使得XML比关系数据库更适合存储不规则的数据,因此XML在数据存储方面越来越得到人们的青睐。

3. 在C#中实现XML文件的操作

在C#语言中像其他类库一样也提供了对XML文件操作的类库,我们只需要引用类库的名称空间然后根据类库提供的基本方法来对XML文件进行读、写、插入、删除等一系列的操作。在本系统中主要应用的是XML文件的写入和读出的操作,下面将对XML的写入数据和和读出数据做详细的介绍。

(1)      写入xml文件

在VC#中写入XML文件主要是通过XMLTextWriter方法写入,程序如下:

Using System.Xml

string filePath= projectPath + @"\水力计算\泄洪能力计算\表孔泄洪能力计算\有胸墙式表孔泄洪能力计算.xml";

string filePath= projectPath + savePath+".xml";

            if (File.Exists(filePath))

            {

                XmlTextWriter xml = newXmlTextWriter(filePath, Encoding.GetEncoding("Gb2312"));

                xml.Formatting =Formatting.Indented;

                xml.WriteStartDocument();

               xml.WriteStartElement("CDPGD");

                xml.WriteStartElement("表孔泄洪能力计算");

 

                xml.WriteStartElement("基本参数");

                xml.WriteStartElement("堰顶高程");

                xml.WriteValue(XHyTxtbox.Text);

                xml.WriteEndElement();

                xml.WriteStartElement("校核洪水位");

                xml.WriteValue(XHjTxtbox.Text);

                xml.WriteEndElement();

                xml.WriteEndElement();//基础参数

                xml.WriteEndElement();//表孔能力计算

                xml.WriteEndElement();//cdpgd

                xml.WriteEndDocument();

                xml.Flush();

                xml.Close();

添加到程序中,运行程序后得到的XML文件如下:

<?xmlversion="1.0" encoding="gb2312"?>

<CDPGD>

  <表孔泄洪能力计算>

    <基本参数>

      <堰顶高程>1460</堰顶高程>

      <坝基高程>1385</坝基高程>

      <校核洪水位>1480</校核洪水位>

    </基本参数>

  </表孔泄洪能力计算>

</CDPGD>

(2)      读取XML文件

首先应实例化一个XML文件类,然后通过该文件加载一个特定路径下xml文件,最后根据文件的中节点信息读取需要的节点的值。在读取节点值的时候应注意要读取某个子节点必须要获取这个子节点的根节点信息,只有这样这样才能读取子节点信息,因为xml文件结构就是数据结构中的树的结构是一样的,一棵树只有一个根,同样在xml文件中也只有一个根(树根)节点。读取xml文件的程序如下:

XmlDocumentxmlDoc = new XmlDocument();

xmlDoc.Load(filePath);//filePath自己可以指定一个任意的路径

XmlNode node =xmlDoc.SelectSingleNode("CDPGD");

node =node.SelectSingleNode("表孔泄洪能力计算");

XmlNodeList list= node.SelectSingleNode("计算结果").ChildNodes;

int length =list.Count;

waterLeves = newdouble[length / 2];

CrestArray = newdouble[length / 2];

for (int i = 0;i < length / 2; i++)

{

  waterLeves[i] = double.Parse(list[2 *i].InnerText);//水位

  CrestArray[i] = double.Parse(list[2 * i + 1].InnerText);//流量

}

上面的文件是读取表孔泄洪能力计算结果中的水位和对应流量的信息,然后存放到两个对应的数组中。

(3)      修改XML文件

修改xml文件的方法主要有使用XPathNavigato修改数据和使用Dom修改xml数据(包括使用XmlElement和使用XmlNode两种方法),下面主要介绍如何使用XmlNode方法修改Xml文件。

首先,读取一个xml文件(方法见读取XML文件);

其次,使用XmlNode对象中的元素节点级别(InnerText属性)和文本节点级别(Value属性)方法找到我们需要的文本数据;如下所示:

XmlDocumentxmlDoc = new XmlDocument();

xmlDoc.Load(Server.MapPath(filePath+mark.xml));//filePath自己可以指定一个任意的路径

foreach(XmlNodenode in root.SelectNodes(path))

{

//通过元素节点的方法

//需要使用node.FirstChild.InnerText属性

   intmark = int.Parse(node.FirstChild.InnerText);
   mark++;
  node.FirstChild.InnerText = mark.ToString();

//通过文本节点的方法
    //直接找到节点的最底部,也就是文本节点

   //此时node.Value才是需要的文本数据

   XmlNode xn = node.FirstChild.FirstChild;

   int mark = int.Parse(xn.Value);

   mark++;
     xn.Value =mark.ToString();

}

//保存修改到原来的文件
doc.Save(Server.MapPath(path+mark.xml));

最后,找到之后节点赋予新的值,保存xml文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值