扩展标记语言XML(eXtensible Markup Language) 是由W C组织制定的 做为用于替代HTML语言的一种新型的标记语言 XML内部有着很多基本标准 XML就是通过与这些相关标准地结合 应用于科咐烂学计算 电子出版 多媒体制作和电子商务的 C#作为一种新型的程序语言 是 Net框架的一个重要组成部分 他和XML的关系颇深 本文就从一个方面来探讨一下这二者的关系 即 看用C#如何来创建和读取XML文档
一.本文程序设计和运行的软件环境
(一)微软公司视窗 服务器版
(二) Net FrameWork SDK Beta
二.C#创建XML文档
在本文中我们来介绍一下用C#创建XML文档的二种方法 这二种方法各有千秋 第一种创建起来更灵活 第二种创建起来更方便
(一)C#创建XML文档的第一种方法
这一种方法是按照按照XML的结构一步一步的构建XML文档 C#构建XML文档通过 Net FrameWork SDK中的命名空间 System Xml 中封装的各种类来实现的 下面就按照一个XML典型文档结构来介绍一下
( )首先要创建一个空的XML文档
在命名空间 System Xml 中有一个类 XmlDocument C#通过这个类来描述XML文档 下面是用C#创建一个XML文档
xmldoc = new System Xml XmlDocument ( )
( )在XML的文档的最头部加入XML的声明段落
利用 XmlDocument 类中的 CreateNode 方法可以创建一个指定类型的XML节点 CreateNode 方法的调用方法总共有三种 在本文中使用的是其一般的方法 具体语法如下
XmlDocument CreateNode Method ( XmlNodeType String String )
然后在利用 XmlDocument 类中的 AppendChild 方法在XML文档中加入此节点 用C#在XML文档中加入声明段落实现的语句如下
xmlnode = xmldoc CreateNode ( XmlNodeType XmlDeclaration ) xmldoc AppendChild ( xmlnode )
( )为XML文档加入元素(element)
加入数据内容是通过元素 在 XmlDocument 类中提供了二个方法
CreateElement 和 CreateTextNode 其中第一个方法是在XML中创建一个元素 另外一个方法是为创建的元素指定文本值 下面是为上面创建的XML文档加入一个根元素
xmlelem = xmldoc CreateElement ( ROOT ) xmltext = xmldoc CreateTextNode ( Root Text )
注释 其中 xmlelem 是培简仿创建的 XmlElement 对象 xmltext 是 XmlText 对象有了创建一个XML元素的例子 就可以根据XML文档中数据的不同的结构来创建其他的数据了
(二)C#创建XML文配纤档的第一种方法的源程序代码(NO cs)
using System using System Xml class MainClass{XmlDocument xmldoc XmlNode xmlnode XmlElement xmlelem XmlElement xmlelem XmlText xmltext static void Main ( string [ ] args ){MainClass app = new MainClass ( ) }public MainClass ( ){xmldoc = new XmlDocument ( ) //加入XML的声明段落xmlnode = xmldoc CreateNode ( XmlNodeType XmlDeclaration ) xmldoc AppendChild ( xmlnode ) //加入一个根元素xmlelem = xmldoc CreateElement ( ROOT ) xmltext = xmldoc CreateTextNode ( Root Text ) xmlelem AppendChild ( xmltext ) xmldoc AppendChild ( xmlelem ) //加入另外一个元素xmlelem = xmldoc CreateElement ( SampleElement ) xmlelem = xmldoc CreateElement ( SampleElement ) xmltext = xmldoc CreateTextNode ( The text of the sample element ) xmlelem AppendChild ( xmltext ) xmldoc ChildNodes Item( ) AppendChild ( xmlelem ) //保存创建好的XML文档try{xmldoc Save ( c:\\data xml ) }catch ( Exception e ){//显示错误信息Console WriteLine ( e Message ) }Console ReadLine ( ) }}
(三)C#创建XML文档的第二种方法
在介绍完第一种方法以后 我想每一个读者都感觉到用C#创建XML文档是一项比较烦杂的工作了 因为不仅要了解创建的知识 还要了解文档的结构 这样创建的过程就是一步一步的了 下面就来介绍一种比较容易的创建方法 这种创建方法是直接定义XML文档 然后把他保存到文件中就可以了
( )创建一个XML文档
这一点和第一种方法一样 在这里就不介绍了
( )通过 XmlDocument 类中的 LoadXml 方法 直接在文档中加入想要加入的XML数据 当然你加入的XML应该符合XML的语法 不然产生的文件也没有什么意义了 下面是加入XML的具体代码
doc LoadXml ( + + Ma Jin Hu + + Feng Huang Street + Chu Zhou City + ANHUI + + + Wang Tian + + Lang Ya Street + He Fei City + ANHUI + + + Zou Wen Biao + + Sai Di Street + Bei Jin City + Bei Jin + + )
( )把保存XML文档到文件中
保存XML文档是通过 XmlDocument 类中的 Save
方法来实现的 具体如下
doc Save ( data xml )
(四)C#创建XML文档的第二种方法的源程序代码(NO cs)
using System using System IO using System Xmlpublic class Sample{public static void Main ( ){//创建一个XmlDocument对象XmlDocument doc = new XmlDocument ( ) doc LoadXml ( + + Ma Jin Hu + + Feng Huang Street + Chu Zhou City + ANHUI + + + Wang Tian + + Lang Ya Street + He Fei City + ANHUI + + + Zou Wen Biao + + Sai Di Street + Bei Jin City + Bei Jin + + ) //保存这个文档到文件中doc Save ( data xml ) }}
用C#创建XML文档的方法其实有很多 在这里只是选取了二种比较典型的方法加以介绍 但无论那一种方法 C#在创建XML的时候都需要用到 Net FrameWork SDK 所以了解并掌握这个类库中的内容对于C#编程是十分必要的 在下面我们将来介绍一下用C#读取XML中的数据 通过这你会发现 C#又是利用这个类库实现这个功能的
三.C#读取XML文件
本节将用C#来读取本文中用第二种方法创建的XML文件 编译NO cs后 执行将产生 data xml 文件 其中 data xml 文件的数据结构如下
Ma Jin Hu Feng Huang Street Chu Zhou City ANHUIWang Tian Lang Ya Street He Fei City ANHUIZou Wen Biao Sai Di Street Bei Jin City Bei Jin
在下面的内容中 我们利用C#读取此文件 并用ListView组件按照数据结构给显示出来
要正确读取XML数据 首先要了解XML的结构 根据上面的XML文件 可以知道此XML包含三个数据 下面就来看如何读取这三条数据
( )装入XML文件 形成数据流
通过创建一个 XmlDocument 对象 然后利用 load 方法 可以把XML文件装入 具体如下
XmlDocument doc = new XmlDocument ( ) // 装入指定的XML文档doc Load ( C:\\data xml )
( )读取XML文件 并显示出来
读取XML是通过创建 XmlNodeReader 对象来实现的 XmlNodeReader 对象主要是用来可以读取XML的节点数据 在本文的程序中使用到了一些 XmlNodeReader 的属性 譬如 NodeType 属性 用来判断读取得节点是什么类型 Value 是节点的值 下面是读取XML文件并显示在ListView中的实现代码 其中listview 是已经创建ListView组件
while ( reader Read ( ) ) {//判断当前读取得节点类型switch ( reader NodeType ){case XmlNodeType Element :s = reader Name break case XmlNodeType Text :if ( s Equals ( Name ) )myItem = Listview Items Add ( reader Value ) elsemyItem SubItems Add ( reader Value ) break } }
四 C#读取XML的文件的源程序代码(read cs)
在了解了上面的内容以后
可以得到用C#读取指定XML文件的完整代码 具体如下
using System using System Drawing using System Collections using System ComponentModel using System Windows Forms using System Data using System Xml public class Form : Form{private Button button private ListView Listview private System ComponentModel Container ponents = null public Form ( ){//初始化窗体中的各个组件InitializeComponent ( ) }//清除程序中使用过的资源protected override void Dispose ( bool disposing ){if ( disposing ){if ( ponents != null ) {ponents Dispose ( ) }}base Dispose ( disposing ) }private void InitializeComponent ( ){button = new Button ( ) Listview = new ListView ( ) SuspendLayout ( ) button Anchor = ( ( AnchorStyles Bottom | AnchorStyles Left ) | AnchorStyles Right ) button Location = new Point ( ) button Name = button button Size = new Size ( ) button TabIndex = button Text = 读取XML文档 button Click += new System EventHandler ( button _Click ) Listview Anchor = ( ( ( AnchorStyles Top | AnchorStyles Bottom ) | AnchorStyles Left ) | AnchorStyles Right ) Listview GridLines = true Listview Location = new Point ( ) Listview Name = Listview Listview Size = new Size ( ) Listview TabIndex = Listview View = View Details this AutoScaleBaseSize = new Size ( ) this ClientSize = new Size ( ) this Controls Add ( Listview )this Controls Add ( button )this Name = Form this StartPosition = FormStartPosition CenterScreen this Text = 用C#来读取XML文档 this ResumeLayout ( false ) }static void Main ( ) {Application Run ( new Form ( ) ) }private void button _Click ( object sender System EventArgs e ){ListViewItem myItem = new ListViewItem ( ) // 构建listview组件Listview Columns Clear ( ) Listview Items Clear ( ) Listview Columns Add ( Name HorizontalAlignment Left ) Listview Columns Add ( Zip HorizontalAlignment Left ) Listview Columns Add ( Address HorizontalAlignment Left ) Listview Columns Add ( City HorizontalAlignment Left ) Listview Columns Add ( State HorizontalAlignment Left ) XmlNodeReader reader = null try{string s = XmlDocument doc = new XmlDocument ( ) // 装入指定的XML文档doc Load ( C:\\data xml ) // 设定XmlNodeReader对象来打开XML文件reader = new XmlNodeReader ( doc ) // 读取XML文件中的数据 并显示出来while ( reader Read ( ) ) {//判断当前读取得节点类型switch ( reader NodeType ){case XmlNodeType Element :s = reader Name break case XmlNodeType Text :if ( s Equals ( Name ) )myItem = Listview Items Add ( reader Value ) elsemyItem SubItems Add ( reader Value ) break } }}finally{//清除打开的数据流if ( reader != null )reader Close ( ) }}}
五.总结
lishixinzhi/Article/program/net/201311/12929以下形式的名值对:
属性位于元素中,如下所示,一个元素可以有任意数量的属性。
表示不应该验证的文本,如下所示:
一个 CDATA (字符数据)区段不能包含字符串 ]] >,因为这个字符串标志着区段的结束。
这也意味着 CDATA 区段不能嵌套。
注意, CDATA 部分的内容必须符合为XML文档指定的编码,XML文档的其余部分也是如此。
不是XML文档主数据的一部分的插入说明。
注释是这样的:
对XML元素的可能内容的抽象描述。
可能的内容模型如下:
在所有情况下,元素可能有也可能没有属性
短语内容模型不涉及元素中属性的存在或不存在。
给定上下文中任何非限定元素所属的名称空间。
添加的默认名称空间没有前缀。
例如:
因为这个名称空间声明没有使用前缀,所以 <Person>、 <Name>和 <DOB>元素都属于这个名称空间。
注意,下面的XML没有使用默认名称空间,它实际上等同于前面的示例:
文档对象模型(DOM)是表示XML和相关格式的对象模型。
包含在XML文档或外部文件中的一系列文本指令。
它定义了可以在文档中使用的所有有效元素和属性。
dtd本身铅穗不使用XML语法。
一个元素通常由两个标记(一个开始标记和一个结束标记)组成,可能包含文本和其他元素。
元素的内容是这两个标记之间的所有内容,包括文本和任何子元素。
下面是一个完整的XML元素,包含开始标记、文本内容和结束标记:
一个元素可以有任意数量的属性和任意数量的子元素。
空元素可以包含一个开始标记和一个结束标记,也可以只包含一个标记。
下面的例子是等价的:
在实践中,元素很可能引用数据记录的不同部分,例如
(在XML文件中)表示一个或多个字符的文本单元。
一个实体有以下结构:
全局元素和局部元素的概念适用于使用名称空间的文档。
全局元素的名称与局部元素的名称放在一个单独的符号空间中。
全局元素是其类型具有全局作用域的元素,即其类型在相应XML模式的顶层定义的元素。
作为 <xs:schema>元素的子元素的元素声明被认为是全局声明。
任何其他元素声明都是局部元素,除非它通过ref属性引用全局声明,这实际上使它成为全局元素。
属性可以是全局的,也可以是局部的。
不是全局的XML元素。
局部元素不显式属于任何名称空间,除非元素是限定的。
参见限定元素和全局元素。
名称空间是为标识符定义域的惟一字符串,以便基于xml的应用程序不会混淆一种类型的文档和另一种类型的文档。
它通常以URL(统一资源位置)的形式给出一个URI(统一资源指示器),它可能与实际的web地址对应,也可能不对应。
例如, “http://www.w3.org” 是一个名称空间。
使用以下语法之一包含命名空间声明:
在这两种情况下,名称空间只在插入名称空间声明的上下文中使用。
在后一种情况下,名称空间与给定的前缀(pre)相关联。
当且仅当元素或属性也有此前缀时,元素或属性就属于该名称空间。
例如:
命名空间声明使用 s01 前缀。
<Person>元素也使用了这个前缀,所以这个元素属于这个名称空间。
但是, <Name>和 <DOB>元素并不显式地属于任何命名空间。
一种指令(在序言中),旨在告诉应用程序如何使用XML文档或如何处理它。
一个例子
这将样式表与文档关联起来。
XML文档中根元素之前的部分。
序言以XML声明(指示使用的XML版本)开始,然后可能包括DTD声明或模式声明以及处理指令。
(从技术上讲,不需要 DTD 或模式。
此外,从技术上讲,可以将两者放在同一个文件中。)
每个XML文档都要笑洞求在最外层只有一个元素。
这称为根元素、根元素或文档元素。
根元素在序言之后。
如果显式地将元素或属性分配给名称空间,则该元素或属性是限定的。
考虑下面的例子,其中 <Person>的元素和属性是不限定的:
在这里,名称空间声明使用 s01 前缀。
没有默认的命名空间。
<碰激枯Person>元素也使用了这个前缀,因此该元素属于这个名称空间。
<Name>和 <DOB>元素或 <GroupID>属性没有前缀,因此它们不显式属于任何名称空间。
相反,考虑以下情况,其中 <Person>的元素和属性是限定的:
在本例中, <Person>元素定义了一个默认名称空间,该名称空间应用于子元素和属性。
注意:XML模式属性 elementFormDefault 属性和 attributeFormDefault 属性控制在给定的模式中元素和属性是否被限定。
在InterSystems IRIS XML支持中,使用类参数来指定元素是否限定。
一种为一组XML文档指定元信息的文档,可作为DTD的替代。
与DTD一样,可以使用模式来验证特定XML文档的内容。
对于某些应用程序,XML模式提供了与 dtd 相比的几个优势,包括:
形式上,模式文档是符合W3 XML模式规范的XML文档(在 https://www.w3.org/XML/Schema )。
它遵守XML规则,并使用一些额外的语法。
通常,文件的扩展名是 .xsd 。
用XSLT编写的文档,描述如何将给定的XML文档转换为另一个XML或其他“人类可读”的文档。
包含在开始元素和相应结束元素之间的一个或多个字符。
例如:
对数据解释的限制。
在XML模式中,每个元素和属性的定义对应于一个类型。
类型可以是简单的,也可以是复杂的。
每个属性都有一个简单类型。
简单类型还表示没有属性和子元素(只有文本节点)的元素。
复杂类型表示其他元素。
下面的模式片段展示了一些类型定义:
如果没有显式地将元素或属性分配给名称空间,则该元素或属性是非限定的。
遵循XML规则的XML文档或片段,例如有一个结束标记来匹配一个开始标记。
指示给定文档中使用的XML版本(以及可选的字符集)的语句。
如果包含,它必须是文档中的第一行。
一个例子:
XPath (XML路径语言)是一种基于XML的表达式语言,用于从XML文档中获取数据。
结果可以是标量,也可以是原始文档的XML子树。
XSLT(可扩展样式表语言转换)是一种基于XML的语言,用于描述如何将给定的XML文档转换为另一个XML或其他“人类可读的”文档。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)