1)XML文档的内容和结构完全分离
这个特性为XML的应用带来了很大的好处。基于这样的特点,企业系统可以轻松地实现内容管理和流程管理的彻底分离,例如系统架构师可以只关注流程运转中各环节的接口定义,而各部门则可以专注在内容发布和维护之上。
举例来说,微软公司的产品Biztalk正是利用了XML内容和结构分离的特点来实现内容和流程定义的分离。另外一个广泛的应用是XSL技术,由于XML文件的内容和结构分离,XSL才可以在不影响内容的情况下改变XML文件结构。
2)互操作性强
大多数纯文本的文件格式都具有这个优点。纯文本文件可以方便地穿越防火墙,在不同操作系统上的不同系统之间通信。而作为纯文本文件格式,XML同样具有这个优点。
3)规范统一
XML具有统一的标准语法,任何系统和产品所支持的XML文档,都具有统一的格式和语法。这样就使得XML具有了跨平台跨系统的特性。作为对比,同样作为文本语言,JavaScript的标准就远没有XML这样统一,以至于经常出现同一静态页面在不同的浏览器中产生不同的结果,而脚本程序员往往需要在程序的入口处费力地判断客户端所支持的脚本版本。
4)支持多种编码
相对于普通文本文档而言,XML文档本身包含了所使用编码的记录,这方便了多语言系统对数据的处理。
5)可扩展性
XML是一种可扩展的语言,可以根据XML的基本语法来进一步限定使用范围和文档格式,从而定义一种新的语言。例如:MathML(数学标记语言)、CML(化学标记语言)和TecML(技术数据标记语言),每种语言都用于其特定的环境。
使用XML的一些场合
1、数据交换
用XML在应用程序和公司之间作数据交换已不是什么秘密了,毫无疑问应被列为第一位。那么为什么XML在这个领域里的地位这么重要呢?原因就是XML使用元素和属性来描述数据。在数据传送过程中,XML始终保留了诸如父/子关系这样的数据结构。几个应用程序可以共享和解析同一个XML文件,不必使用传统的字符串解析或拆解过程。
相反,普通文件不对每个数据段做描述(除了在头文件中),也不保留数据关系结构。使用XML做数据交换可以使应用程序更具有弹性,因为可以用位置(与普通文件一样)或用元素名(从数据库)来存取XML数据。
2、Web服务
Web服务是最令人激动的革命之一,它让使用不同系统和不同编程语言的人们能够相互交流和分享数据。其基础在于Web服务器用XML在系统之间交换数据。交换数据通常用XML标记,能使协议取得规范一致,比如在简单对象处理协议(Simple Object Access Protocol, SOAP)平台上。
SOAP可以在用不同编程语言构造的对象之间传递消息。这意味着一个C#对象能够与一个Java对象进行通讯。这种通讯甚至可以发生在运行于不同操作系统上的对象之间。DCOM, CORBA或Java RMI只能在紧密耦合的对象之间传递消息,SOAP则可在松耦合对象之间传递消息。
3、内容管理
XML只用元素和属性来描述数据,而不提供数据的显示方法。这样,XML就提供了一个优秀的方法来标记独立于平台和语言的内容。
使用象XSLT这样的语言能够轻易地将XML文件转换成各种格式文件,比如HTML, WML, PDF, flat file, EDI, 等等。XML具有的能够运行于不同系统平台之间和转换成不同格式目标文件的能力使得它成为内容管理应用系统中的优秀选择。
4、Web集成
现在有越来越多的设备也支持XML了。使得Web开发商可以在个人电子助理和浏览器之间用XML来传递数据。
为什么将XML文本直接送进这样的设备去呢?这样作的目的是让用户更多地自己掌握数据显示方式,更能体验到实践的快乐。常规的客户/服务(C/S)方式为了获得数据排序或更换显示格式,必须向服务器发出申请而XML则可以直接处理数据,不必经过向服务器申请查询-返回结果这样的双向“旅程”,同时在设备也不需要配制数据库。
甚至还可以对设备上的XML文件进行修改并将结果返回给服务器。想像一下,一台具有互联网功能并支持XML的电冰箱将会给市场带来多么大的冲击吧。你从此不必早起去取牛奶了!
5、配制
许多应用都将配制数据存储在各种文件里,比如.INI文件。虽然这样的文件格式已经使用多年并一直很好用,但是XML还是以更为优秀的方式为应用程序标记配制数据。使用.NET里的类,如XmlDocument和XmlTextReader,将配制数据标记为XML格式,能使其更具可读性,并能方便地集成到应用系统中去。使用XML配制文件的应用程序能够方便地处理所需数据,不用象其他应用那样要经过重新编译才能修改和维护应用系统。
XML在Web应用中的安全性描述
XML风险描述的优势在Web风险中的应用
1. Web中的风险
这里有详细的:http://www.infosecurity.org.cn/article/xmlsec/base/22672.htmlc#来创建和读取xml文档
文章出处: 发布时间:2004-12-31 点击:0
扩展标记语言xml(extensible markup language),是由w3c组织制定的。做为用于替代html语言的一种新型的标记语言,xml内部有着很多基本标准,xml就是通过与这些相关标准地结合,应用于科学计算、电子出版、多媒体制作和电子商务的。c#作为一种新型的程序语言,是.net框架的一个重要组成部分,他和xml的关系颇深。本文就从一个方面来探讨一下这二者的关系。即:看用c#如何来创建和读取xml文档。
一. 本文程序设计和运行的软件环境:
1.微软公司视窗2000服务器版
2..net framework sdk beta 2
二. c#创建xml文档:
在本文中我们来介绍一下用c#创建xml文档的二种方法,这二种方法各有千秋,第一种创建起来更灵活,第二种创建起来更方便。
1.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文档中数据的不同的结构来创建其他的数据了。
2.c#创建xml文档的第一种方法的源程序代码(no1.cs):
using system
using system.xml
class mainclass
{
xmldocument xmldoc
xmlnode xmlnode
xmlelement xmlelem
xmlelement xmlelem2
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 )
//加入另外一个元素
xmlelem2 = xmldoc.createelement ("sampleelement" )
xmlelem2 = xmldoc.createelement ( "" , "sampleelement" , "" )
xmltext = xmldoc.createtextnode ( "the text of the sample element" )
xmlelem2.appendchild ( xmltext )
xmldoc.childnodes.item(1).appendchild ( xmlelem2 )
//保存创建好的xml文档
try
{
xmldoc.save ( "c:\\data.xml" )
}
catch ( exception e )
{
//显示错误信息
console.writeline ( e.message )
}
console.readline ( )
}
}
3.c#创建xml文档的第二种方法:
在介绍完第一种方法以后,我想每一个读者都感觉到用c#创建xml文档是一项比较烦杂的工作了,因为不仅要了解创建的知识,还要了解文档的结构,这样创建的过程就是一步一步的了。下面就来介绍一种比较容易的创建方法,这种创建方法是直接定义xml文档,然后把他保存到文件中就可以了。
◇创建一个xml文档:
这一点和第一种方法一样,在这里就不介绍了。
◇通过"xmldocument"类中的"loadxml"方法,直接在文档中加入想要加入的xml数据。当然你加入的xml应该符合xml的语法,不然产生的文件也没有什么意义了。下面是加入xml的具体代码:
doc.loadxml (
"<employees>" +
"<no1>" +
"<name>ma jin hu</name>" +
"<zip>239000 </zip>" +
"<address>feng huang street</address>" +
"<city>chu zhou city</city>" +
"<state>anhui </state>" +
"</no1>" +
"<no2>" +
"<name>wang tian</name>" +
"<zip>239000 </zip>" +
"<address>lang ya street</address>" +
"<city>he fei city</city>" +
"<state>anhui </state>" +
"</no2>" +
"<no3>" +
"<name>zou wen biao</name>" +
"<zip>100000 </zip>" +
"<address>sai di street</address>" +
"<city>bei jin city</city>" +
"<state>bei jin</state>" +
"</no3>" +
"</employees>" )
把保存xml文档到文件中:
保存xml文档是通过"xmldocument"类中的"save"方法来实现的。具体如下:
doc.save ( "data.xml" )
◇c#创建xml文档的第二种方法的源程序代码(no2.cs):
using system
using system.io
using system.xml
public class sample
{
public static void main ( )
{
//创建一个xmldocument对象
xmldocument doc = new xmldocument ( )
doc.loadxml (
"<employees>" +
"<no1>" +
"<name>ma jin hu</name>" +
"<zip>239000 </zip>" +
"<address>feng huang street</address>" +
"<city>chu zhou city</city>" +
"<state>anhui </state>" +
"</no1>" +
"<no2>" +
"<name>wang tian</name>" +
"<zip>239000 </zip>" +
"<address>lang ya street</address>" +
"<city>he fei city</city>" +
"<state>anhui </state>" +
"</no2>" +
"<no3>" +
"<name>zou wen biao</name>" +
"<zip>100000 </zip>" +
"<address>sai di street</address>" +
"<city>bei jin city</city>" +
"<state>bei jin</state>" +
"</no3>" +
"</employees>" )
//保存这个文档到文件中
doc.save ( "data.xml" )
}
}
用c#创建xml文档的方法其实有很多,在这里只是选取了二种比较典型的方法加以介绍。但无论那一种方法,c#在创建xml的时候都需要用到.net framework sdk。所以了解并掌握这个类库中的内容对于c#编程是十分必要的,在下面我们将来介绍一下用c#读取xml中的数据,通过这你会发现,c#又是利用这个类库实现这个功能的。
三.c#读取xml文件:
本节将用c#来读取本文中用第二种方法创建的xml文件,编译no2.cs后,执行将产生"data.xml"文件,其中"data.xml"文件的数据结构如下:
<employees>
<no1>
<name>ma jin hu</name>
<zip>239000 </zip>
<address>feng huang street</address>
<city>chu zhou city</city>
<state>anhui </state>
</no1>
<no2>
<name>wang tian</name>
<zip>239000 </zip>
<address>lang ya street</address>
<city>he fei city</city>
<state>anhui </state>
</no2>
<no3>
<name>zou wen biao</name>
<zip>100000 </zip>
<address>sai di street</address>
<city>bei jin city</city>
<state>bei jin</state>
</no3>
</employees>
在下面的内容中,我们利用c#读取此文件,并用listview组件按照数据结构给显示出来。下图是读取此xml后的运行界面:
图01:c#读取xml后的运行界面
要正确读取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中的实现代码,其中listview1是已经创建listview组件:
while ( reader.read ( ) )
{
//判断当前读取得节点类型
switch ( reader.nodetype )
{
case xmlnodetype.element :
s = reader.name
break
case xmlnodetype.text :
if ( s.equals ( "name" ) )
myitem = listview1.items.add ( reader.value )
else
myitem.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 form1 : form
{
private button button1
private listview listview1
private system.componentmodel.container components = null
public form1 ( )
{
//初始化窗体中的各个组件
initializecomponent ( )
}
//清除程序中使用过的资源
protected override void dispose ( bool disposing )
{
if ( disposing )
{
if ( components != null )
{
components.dispose ( )
}
}
base.dispose ( disposing )
}
private void initializecomponent ( )
{
button1 = new button ( )
listview1 = new listview ( )
suspendlayout ( )
button1.anchor = ( ( anchorstyles.bottom | anchorstyles.left )
| anchorstyles.right )
button1.location = new point ( 240 , 296 )
button1.name = "button1"
button1.size = new size ( 112 , 37 )
button1.tabindex = 0
button1.text = "读取xml文档"
button1.click += new system.eventhandler ( button1_click )
listview1.anchor = ( ( ( anchorstyles.top | anchorstyles.bottom )
| anchorstyles.left )
| anchorstyles.right )
listview1.gridlines = true
listview1.location = new point ( 10 , 9 )
listview1.name = "listview1"
listview1.size = new size ( 623 , 269 )
listview1.tabindex = 1
listview1.view = view.details
this.autoscalebasesize = new size ( 6 , 14 )
this.clientsize = new size ( 608 , 348 )
this.controls.add ( listview1 )
this.controls.add ( button1 )
this.name = "form1"
this.startposition = formstartposition.centerscreen
this.text = "用c#来读取xml文档"
this.resumelayout ( false )
}
static void main ( )
{
application.run ( new form1 ( ) )
}
private void button1_click ( object sender , system.eventargs e )
{
listviewitem myitem = new listviewitem ( )
// 构建listview组件
listview1.columns.clear ( )
listview1.items.clear ( )
listview1.columns.add ( "name" , 80 , horizontalalignment.left )
listview1.columns.add ( "zip" , 80 , horizontalalignment.left )
listview1.columns.add ( "address" , 80 , horizontalalignment.left )
listview1.columns.add ( "city" , 80 , horizontalalignment.left )
listview1.columns.add ( "state" , 80 , 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 = listview1.items.add ( reader.value )
else
myitem.subitems.add ( reader.value )
break
}
}
}
finally
{
//清除打开的数据流
if ( reader != null )
reader.close ( )
}
}
}
五.总结:
c#和xml的渊源是很深的,本文只是从一个侧面反映了二者关系的密切程度。在.net framework sdk中存在许多可以直接操作xml的类库,掌握这些类库的使用方法,对用c#开发和xml相关程序是十分必要的。
它是由SGML所精简而来的一种通用标注语言,主要是要简化SGML烦杂的结构,强化HTML过于简单而不够严谨的语法。微软是XML技术的推动者之一,它希望能够建立一个可以为WWW 广泛使用语言环境,推动程序的兼容与协同,从而降低成本,刺激增长。虽然XML创立之初只是被当作一项基础技术,但其发展早已超出设计者原先的构想。不论是学术界还是商业界都将其视为下一代网络的基石。XML现在已经成为一股不可抵挡的技术潮流。现有的XML主要应用在四个方面:一是应用于具有不同复杂格式的不同数据源间的交互;二是应用于大量运算负荷分布在客户端的情况,用户可以根据自己的需求选择和制作不同的应用程序以处理数据,而服务器只需发出同一个XML文件;三是应用于将同一数据以不同的形式表现出来;四是应用于网络代理对所取得的信息进行编辑、增减以适应个人用户的需要,形成具有个人特色的数据文件。事实上,XML技术的潜能还远未被充分挖掘。据一份最新的研究指出,以XML为基础的内容生命周期产品,将在今后5年以10倍的速度快速成长,在2008年达到116亿美元的营业规模。以XML和Web服务为主的研究公司Zap Think在研究报告中也指出,这些以XML为基础并包括Web服务的工具,是将旧有系统再度激活的新希望。“XML最大的影响在于XML软件大量兴起:XML剖析器、XML程序语言库、XSLT处理器、XSL FO处理器、数据库接受XML——不只如此,还有网络浏览器也接受XML。”XML工作小组创始会员C.M. Sperberg-McQueen如是认为。也正因为如此,IBM、微软、SUN、惠普、Oracle等大公司纷纷进入这个市场。而在XML最大应用之一的数据格式转换领域,Adobe、微软、Core都在各自相关的软件产品中充分利用了XML技术。欢迎分享,转载请注明来源:夏雨云
评论列表(0条)