XML技术和Web服务
第12章XML技术和Web服务
12.1 XML概述
XML是"eXtensible Markup Language"的缩写,即可扩展标记语言。XML对于语法有着严格的规定,只有当一个XML文档符合语法规定,处理程序才能对它加以分析和处理。每个XML文档都有一个逻辑结构和物理结构。从逻辑上讲,文档由声明(declaration)、元素(element)、注释(comment)、字符引用(character reference)和处理说明(processing instruction)组成。
1、XML声明
XML声明是处理指令的一种,一个XML文档最好以一个XML声明作为开始。下面是一个完整的XML声明:
在一个XML的处理指令中必须包括version属性,指明所采用的XML的版本号,而且它必须在属性列表中排在第一位。standalone属性表明该XML文档是否和一个外部文档类型定义DTD配套使用。encoding属性则指明了数据所采用的编码标准。
2、元素
元素是XML文档内容的基本单元。从语法上讲,一个元素包含一个起始标记、一个结束标记以及标记之间的数据内容。其形式是:
<标记>数据内容标记>
对于标记有以下语法规定:
标记都区分大小写。
要有正确的结束标记。结束标记除了要和起始标记在拼写和大小写上完全相同,还必须在前面加上一个斜杠"/"。当一对标记之间没有任何文本内容
时,可以不写结束标记,而在起始标记的最后冠以斜杠"/"来确认。这样的
标记称为"空标记"。
XML标记都必须合理嵌套。
标记命名要合法。标记名应该以字母、下划线"_"或冒号":"开头,后面跟字母、数字、句号". "、冒号、下划线或连字符"-",但是中间不能有空格,而
且任何标记名不能以"XML"(或者"XML"大小写的任何组合,如"XML"、
"XML"、"XML"等等)起始。
有效使用属性。标记中可以包含任意多个属性,属性以名称/取值对出现,属性名不能重复,名称与取值之间用等号"="分隔,且取值用引号引起来。
3、CDATA节
在标记CDA TA下,所有的标记、实体引用都被忽略,而被XML处理程序一视同仁地当作字符数据看待。CDA TA的形式如下:
<![CDATA[ 文本内容]] >
CDA TA的文本内容中不能出现字符串"]]>",另外,CDA TA不能嵌套,
0第12章 XML技术和Web服务
2 4、注释
注释是在XML文档中加入一些用作解释的字符数据,XML处理器不对它们进行任
何处理。在XML中,注释的方法与HTML完全相同,用"<!--"和"-->"将注释文本引起来。对于注释还有以下规定:
?注释不能出现在XML声明之前;
?注释不能出现在标记中;
?注释中不能出现连续两个连字符,即"--" 如:;
?注释中可包含元素,但元素中不能包含"--"包含的元素解析时被忽略;
?注释不能嵌套;
5、处理指令
处理指令是用来给处理XML文档的应用程序提供信息的,XML分析器把信息原封不动地传给应用程序,由应用程序来解释这个指令,并遵照它所提供的信息进行处理。处理指令应该遵循下面的格式:
<?处理指令名处理指令信息>
XML文档使用的是自描述的和简单的语法,一个XML文档最基本的构成包括:声明,处理指令(可选)和元素。
12.2 XML常用对象
XML所有对象都在System.Xml命名空间中,并且这些对象是以XmlDocument对象为核心组织起来的。下面来讲解一下XML常用对象。
1、XmlNode对象
XmlNode对象表示XML 文档中的单个节点。该对象常用属性及方法意义如下:
?Name属性:获取节点的限定名。
?V alue属性:获取或设置节点的值。
?BaseURI属性:获取当前节点的基URI。
?ChildNodes属性:获取节点的所有子节点。
?FirstChild属性:获取节点的第一个子级。
?HasChildNodes属性:获取一个值,该值指示节点是否有任何子节点。
?LastChild属性:获取节点的最后一个子级。
?NamespaceURI属性:获取该节点的命名空间URI。
?WriteTo方法:将当前节点保存到指定的XmlWriter对象中。
?SelectSingleNode方法:选择匹配XPath 表达式的第一个XmlNode。
?SelectNodes方法:选择匹配XPath 表达式的节点列表。
?RemoveChild方法:移除指定的子节点。
?RemoveAll方法:移除当前节点的所有子节点和/或属性。
?PrependChild方法:将指定的节点添加到该节点的子节点列表的开头。
?InsertBefore方法:将指定的节点紧接着插入指定的引用节点之前。
峰杰工作室
?InsertAfter方法:将指定的节点紧接着插入指定的引用节点之后。
?AppendChild方法:将指定的节点添加到该节点的子节点列表的末尾。
?Clone方法:创建当前节点的一个副本。
2、XmlDocument对象
XmlDocument对象用来描述XML文件对象。在进行实例化时,可以由XmlReader 对象打开一个现有的XML文件,也可以根据自身的构造函数创建一个XML文件对象。当XmlDocument对象被创建或赋值时,将在内存中生成一个描述XML文件对象,这样就可以在这个对象范围内,对指定的XML文件执行导航和写入的操作。该对象常用属性及方法意义如下:
?Name属性:获取节点的限定名。
?NodeType属性:获取当前节点的类型。
?ParentNode属性:获取该节点(对于可以具有父级的节点)的父级。
?LocalName属性:获取节点的本地名称。
?InnerXml属性:获取或设置表示当前节点子级的标记。
?DocumentType属性:获取包含DOCTYPE 声明的节点。
?DocumentElement属性:获取文档的根System.Xml.XmlElement。
?SchemaInfo属性:返回节点的后架构验证信息集(PSVI)。
?ImportNode方法:将节点从另一个文档导入到当前文档。
?Load方法:从指定的URL 加载XML 文档。
?LoadXml方法:从指定的字符串加载XML 文档。
?ReadNode方法:根据System.Xml.XmlReader 中的信息创建一个
System.Xml.XmlNode 对象。读取器必须定位在节点或属性上。
?Save方法:将XML 文档保存到指定的文件。
?CreateElement方法:创建具有指定名称的元素。
3、XmlReader对象
XmlReader对象就是XML数据读取器,即对XML数据进行快速、非缓存、只进访问。该对象常用属性及方法意义如下:
?V alue属性:获取当前节点的文本值。
?ReadState属性:获取读取器的状态。
?NodeType属性:获取当前节点的类型。
?Name属性:获取当前节点的限定名。
?LocalName属性:获取当前节点的本地名称。
?EOF属性:获取一个值,该值指示此读取器是否定位在流的结尾。
?IsEmptyElement属性:获取一个值,该值指示当前节点是否为空元素。
?Depth属性:获取XML 文档中当前节点的深度。
?Skip方法:跳过当前节点的子级。
?Read方法:从流中读取下一个节点。
?MoveToElement方法:移动到包含当前属性节点的元素。
?Create方法:使用指定的流创建一个新的XmlReader 实例。
3
0第12章 XML技术和Web服务
4 ?Dispose方法:释放由XmlReader 占用的非托管资源,还可以另外再释放托管
资源。
4、XmlWriter对象
XmlWriter对象表示一个编写器,该编写器提供一种快速、非缓存和只进的方式来生成包含XML 数据的流或文件。该对象常用属性及方法意义如下:
?XmlLang属性:获取当前的xml:lang 范围。
?XmlSpace属性:获取表示当前xml:space 范围的System.Xml.XmlSpace。
?WriteState属性:获取编写器的状态。
?Create方法:使用指定的文件名创建一个新的XmlWriter 实例。
?Flush方法:将缓冲区中的所有内容刷新到基础流,并同时刷新基础流。
?WriteAttributeString方法:写出具有指定的前缀、本地名称、命名空间URI 和
值的属性。
?WriteElementString方法:写出具有指定的本地名称和值的元素。
?WriteEndDocument方法:关闭任何打开的元素或属性并将编写器重新设置为
Start 状态。
?WriteEndElement方法:关闭一个元素并弹出相应的命名空间范围。
?WriteName方法:当在派生类中被重写时,写出指定的名称,确保它是符合
W3C XML 1.0的有效名称。
?WriteNode方法:将所有内容从读取器复制到编写器并将读取器移动到下一个
同级的开始位置。
?WriteString方法:编写给定的文本内容。
?Close方法:关闭此流和基础流。
5、XmlElement对象
XmlElement对象用于管理XML数据中的元素节点,该对象常用属性及方法意义如下:
?Attributes属性:获取包含该节点属性列表的XmlAttributeCollection。
?HasAttributes属性:获取一个布尔值,该值指示当前节点是否有任何属性。
?InnerText属性:获取或设置节点及其所有子级的串联值。
?InnerXml属性:获取或设置只表示此节点子级的标记。
?IsEmpty属性:获取或设置元素的标记格式。
?LocalName属性:获取当前节点的本地名称。
?Name属性:获取节点的限定名。
?NamespaceURI属性:获取该节点的命名空间URI。
?NodeType属性:获取当前节点的类型。
?Prefix属性:获取或设置该节点的命名空间前缀。
?SchemaInfo属性:获取作为架构验证的结果分配给此节点的架构验证后信息
集。
?RemoveChild方法:删除指定的子节点。
?RemoveAll方法:删除当前节点的所有指定属性和子级。不移除默认属性。
峰杰工作室
?CloneNode方法:创建此节点的一个副本。
?GetAttribute方法:返回具有指定名称的属性的值。
?GetAttributeNode方法:返回具有指定本地名称和命名空间URI 的
System.Xml.XmlAttribute。
?WriteContentTo方法:将节点的所有子级保存到指定的XmlWriter 中。
?WriteTo方法:将当前节点保存到指定的XmlWriter 中。
?SetAttributeNode方法:添加指定的System.Xml.XmlAttribute。
?SelectNodes方法:选择匹配Xpath表达式的节点列表
?SelectSingleNode方法:选择匹配Xpath表达式的第一个XmlNode。
6、XmlDataDocument对象
XmlDataDocument对象表示DataSet对象的XML文件对象。通过将一个XmlDataDocument对象实例绑定到DataSet对象,并对DataSet对象中的数据进行存储和检索。该对象常用方法意义如下:
?Load方法:使用指定的URL 加载XmlDataDocument对象。
?CreateElement方法:创建具有指定XmlNode.Prefix、XmlDocument.LocalName
和https://www.360docs.net/doc/d88910891.html,spaceURI 的元素。
?CreateNavigator方法:创建一个用于导航此文档的新XPathNavigator 对象。
XPathNavigator 定位在node 参数中指定的节点上。
还可以利用DataSet数据集的ReadXML方法动态读取XML文件中的数据,利用WriteXml方法动态生成XML文件。
DataSet数据集的ReadXML方法语法结构如下:
Public XmlReadMode ReadXml ( string filename )
Filename参数表示读取源的文件名。
DataSet数据集的WriteXML方法语法结构如下:
public void WriteXml(string fileName)
Filename参数表示要向其写入的文件的名称(包括路径)。
DataSet数据集操纵XML文件的其他常用方法及意义如下:
?GetXml方法:可以返回存储在DataSet中的数据的XML表示形式。
?GetXmlSchema方法:可以返回存储在DataSet中的数据的XML表示形式的
XML架构。
?InferXmlShchema方法:将指定System.Xml.XmlReader 中的XML 架构应用
于System.Data.DataSet。
?ReadXmlSchema方法:从指定的文件中将XML 架构读入DataSet。
?WriteXmlSchema方法:将XML 架构形式的DataSet 结构写入文件。
实例动态增加并显示XML数据
1)单击菜单栏中的“文件/新建/网站”命令(快捷键:Ctrl+Alt+N),弹出“新建网站”对话框,设置模板为“https://www.360docs.net/doc/d88910891.html,网站”,然后设置网站的位置及语言,单击
5
0 第12章 XML 技术和Web 服务
6 “确定”按钮,就可以新建网站。
2
)
修改当前网页标题为“动态增加
XML 数据”,具体代码如下:
3) 利用表格布局页面。单击工具箱中的
控件,在Web 界面中单击添加该控
件,然后设置“Align ”属性为“center ”,“Style ”属性为“width: 350px;”,如图12-1所示。
图12-1
添加表格控件
4) 单击“源”选项卡,就可以看到Web 界面设计代码,然后设置网页标题信息为“动
态增加XML
数据”,然后设置表格为7行2列,并合并部分单元格,最后输入说明性文字并美化,单击“设计”选项卡,效果如图12-2所示。
图12-2 利用表格布局页面
5) 添加文本框控件。单击工具箱中的控件,然后在表格中添加5个该控
件,并设置其“Text ”属性为空,最后调整其大小及位置后效果如图12-3所示。
图12-3 添加文本框控件
6) 添加按钮控件。单击工具箱中的控件,然后在表格中添加3个该控件,并
设置他们的“Text ”属性分别为“添加”、“重填”和“浏览”,最后调整其大小及位置后效果如图12-4所示。
峰杰工作室
7
图12-4 添加按钮控件
7) 添加XML 文件。单击菜单栏中的“网站/添加新项”命令(快捷键:
Ctrl+Shift+A ),打开“添加新项”对话框,选择“XML 文件”项,如图12-5所示。
图12-5 添加新项对话框
8) 设置好参数后,单击“添加”按钮,就把XML 文件添加到应用程序中,然后输入
如下代码:
9) 添加Web 窗体。单击菜单栏中的“网站/添加新项”命令,弹出“添加新项”对话
0 第12章 XML 技术和Web 服务
8 框,选择“Web 窗体”项,设置名称为“Myshow.aspx ”,如图12-6所示。
图12-6 添加新项对话框
10) 单击“添加”按钮,就把Web 窗体添加到应用程序中。
11) 在该页面中添加表格及说明文字,美化后效果如图12-7所示。
图12-7 利用表格布局页面并美化
12)
添加数据绑定显示控件。单击工具箱中的控件,然后在表格中添加
该控件,然后利用自动套用格式进行美化,再调整其大小及位置后效果如图12-8所示。
图12-8 添加数据绑定显示控件
13) 添加代码。双击Default.aspx 设计页面,进入代码视图。为了调用XmlDocument
对象和XmlNode 对象,要导入System.Xml 命名空间,具体代码如下:
14) 双击“添加”按钮,添加该按钮的单击事件代码,实现动态向XML 文件中添加
数据功能,具体代码如下:
峰杰工作室
9
15) 双击“重填”按钮,添加该按钮的单击事件代码,实现清空所有填写数据信息功
能,具体代码如下:
16) 双击“浏览”按钮,添加该按钮的单击事件代码,实现动态查看插入后的XML
数据信息功能,具体代码如下:
17)
双击Myshow.aspx 设计页面,添加该页面的加载事件代码,具体如下:
18) 运行程序。单击菜单栏中的“调试/启动调试”命令(快捷键:F5)或单击工具箱
0第12章 XML技术和Web服务
10 中的按钮,运行程序,然后在对应的文本框中输入要添加XML数据信息,如图12-9所示。
图12-9 动态增加XML数据
19)在各文本框中输入相应的数据信息,如果输入错误,可以单击“重填”按钮,清空所有文本框,然后重新输入。
20)如果输入的数据信息格式都正确,然后单击“添加”按钮,就会弹出提示对话框,如图12-10所示。
图12-10 提示对话框
21)单击提示对话框中的“确定”按钮,再单击“浏览”按钮,就可以看到插入的XML数据信息,如图12-11所示。
图12-11 插入的XML数据信息
12.3 Web服务
Web服务是一种新的Web应用程序的分支,是构建应用程序的普通模型,能在所有支持Internet网络通讯的操作系统上实施。Web服务主要利用Http和Soap协议使用商业数据在Web上传输。Web服务实际上是基于XML的针对商业应用程序的系统服
峰杰工作室
11
务,可在单个应用程序中使用,也可在国际互联网中被许多应用程序使用。因为一个Web 服务可通过一个标准接口访问,所以它允许多个不同的系统协同合作进行单一的网络计算。
12.3.1 创建并测试Web 服务
在Visual Studio 2008中,创建Web 服务是非常简单的,因为是通过ASP .NET Web 服务模板来实现的,具体操作如下:
1) 单击菜单栏中的“文件/新建/网站”命令(快捷键:Ctrl+Alt+N ),弹出“新建网站”
对话框,设置模板为“ASP .NET Web 服务”,然后设置网站的位置及语言,如图12-12所示。
图12-12 新建网站对话框
2) 设置好后,单击“确定”按钮,就可以新建一个Web 服务,并自动生成了一个
HelloWorld 服务范例,如图12-13所示。
图12-13 新建Web 服务
3) 注意,方法前面的[WebMethod]表示这个方法可以由Web 调用。
4)
下面在代码中添加自己定义的方法Sum(),实现两个数的相加,具体代码如下:
0 第12章 XML 技术和Web 服务
12
5) 测试Web 服务。单击菜单栏中的“调试/启动调试”命令(快捷键:F5)或单击工具箱中的按钮,运行程序,就可以看到公用HelloWorld 服务和自定义的Sum 服务,如图12-14所示。
图12-14 运行Web 服务
6) 单击Sum 服务,就进行自定义Web 服务测试页面,如图12-15所示。
图12-15 自定义Web 服务测试页面
7) 在这里输入参数a 和b 的值,然后单击“调用”按钮,就可以看到测试Web 服务结
峰杰工作室
13
果,如图12-16所示。
图12-16 测试Web 服务结果
8) 从测试结果可以看出,Web 服务的方法的返回结果是使用XML 进行编码的。 12.3.2 Windows 应用程序引用Web 服务
首先创建Windows 应用程序,然后通过“Web 引用”与服务器相连,从而使Windows 客户端应用程序可以调用服务器端程序,从而实现数值的运算。具体方法如下
1) 单击菜单栏中的“文件/新建/项目”(快捷键:Ctrl+Shift+N ),打开“新建项目”对
话框,项目类型选择“Visual C#”,模板选择“Windows 窗体应用程序”项.,名称为“Ex12_1”。
2) 设置好各参数后,单击“确定”按钮,就可以创建Windows 窗体应用程序,然后设
置“Text ”属性为“Windows 应用程序引用Web 服务”,如图12-17所示。
图12-17 设置窗体属性
3) 在窗体中添加2个框架、3个标签、2个文本框和1个按钮,属性设置后并调整他们
的大小及位置,效果如图12-18所示。
图12-18 添加2个框架、3个标签、2个文本框和1个按钮
4) 添加Web 引用。单击菜单栏中的“添加服务引用”命令,弹出“添加服务引用”对
0第12章 XML技术和Web服务
14 话框,如图12-19所示。
图12-19 添加服务引用对话框
5)单击“高级”按钮,弹出“服务引用设置”对话框,如图12-20所示。
图12-20 服务引用设置对话框
6)单击“添加Web引用”按钮,弹出“添加Web引用”对话框,这样用户可以查找本地计算机上的Web服务,也可以查找本地网络上Web服务,还可以查找UDDI目录上的Web服务,即在地址栏中直接输入它们的URL,如图12-21所示。
图12-21 添加Web引用对话框
峰杰工作室
15
7) 在这里要调用的Web 服务在本机上,所以在地址栏输入Web 服务的地址如下:http://localhost:1271/2/Service.asmx (这是前面创建的Web 服务地址),然后单击“前住”按钮,将显示Service 的帮助页面,如图12-22所示。
图12-22 Service 的帮助页面
8) 单击“添加引用”按钮,就把引用添加到项目中,在“解决方案资源管理器”中看
到刚才添加的Web 引用。
9
) 添加代码。双击“计算”按钮,添加该按钮的单击事件代码,具体如下:
10)
单击菜单栏中的“调试/启动调试”命令(快捷键:F5)或单击工具箱中的
按钮,运行程序,然后在文本框中输入数值,然后单击“计算”按钮,就可以计算出输入的两个数的和,如图12-23所示。
图12-23 Windows 应用程序引用Web 服务
0 第12章 XML 技术和Web 服务
16 12.3.3 Web 应用程序引用Web 服务
1) 单击菜单栏中的“文件/新建/网站”命令(快捷键:Ctrl+Alt+N ),弹出“新建网
站”对话框,设置模板为“ASP .NET 网站”,然后设置网站的位置及语言,单击“确定”按钮,就可以新建网站。
2)
修改当前网页标题为“
Web
应用程序引用Web 服务”,具体代码如下:
3) 在Web 设计界面中添加3个标签、2个文本框和1个按钮,属性设置后并调整他们
的位置后效果如图12-24所示。
图12-24 添加3个标签、2
个文本框和1个按钮
4) 下面实现Web 页面与Web 服务的关联。单击菜单栏中的“网站/添加Web 引用”命
令,弹出“添加Web 引用”对话框,如图12-25所示。
图12-25 添加Web 引用对话框
5) 在地址栏输入Web 服务的地址如下:http://localhost:1271/2/Service.asmx ,然后单击
“前住”按钮,将显示Service 的帮助页面,如图12-26所示。
峰杰工作室
17
图12-26 Service 的帮助页面
6) 单击“添加引用”按钮,就把引用添加到项目中,在“解决方案资源管理器”中看
到刚才添加的Web 引用。
7)
添加代码。双击“计算”按钮,添加该按钮的单击事件代码,具体如下:
8)
单击菜单栏中的“调试/启动调试”命令(快捷键:F5)或单击工具箱中的按
钮,运行程序,然后在文本框中输入数值,然后单击“计算”按钮,就可以计算出
输入的两个数的和,如图12-27所示。
图12-27 Web 应用程序引用Web 服务
0 第12章 XML 技术和Web 服务
18 实例 利用Web 服务实现计算器功能
1) 单击菜单栏中的“文件/新建/网站”命令(快捷键:Ctrl+Alt+N ),弹出“新建网
站”对话框,设置模板为“ASP .NET 网站”,然后设置网站的位置及语言,单击“确定”按钮,就可以新建网站。
2) 添加表格控件。单击工具箱中的控件,在Web 界面中单击添加该控件,然
后设置“Align ”属性为“center ”,“Style ”属性为“width: 450px ”。
3) 单击“源”选项卡,就可以看到Web 界面设计代码,然后设置网页标题信息为“利
用Web 服务实现计算器功能”,然后设置表格为2行1列,再输入说明性文字并美化,单击“设计”选项卡,效果如图12-28所示。
图12-28 利用表格布局页面
4) 在表格中添加1个文本框和16个按钮,属性设置后再调整他们的大小及位置后效果
如图12-29所示。
图12-29 添加1个文本框和16个按钮
5) 添加Web 服务。单击菜单栏中的“网站/添加新项”命令,弹出“添加新项”对话
框,选择“Web 服务”项,如图12-30所示。
图12-30 添加新项对话框
峰杰工作室
19
6) 设置好各参数,单击“添加”按钮,就在应用程序中添加一个Web 服务。然后编写
4个方法,分别为Sum 、Sub 、Mul 和Div ,实现加、减、乘和除运算功能,具体代码如下:
7) 下面实现Web 页面与Web 服务的关联。单击菜单栏中的“网站/添加Web 引用”命
令,弹出“添加Web 引用”对话框,如图12-31所示。
图12-31 添加Web 引用对话框
8) 单击“此解决方案中的Web 服务”,就可以找到刚添加的Web 服务,如图12-32所
0 第12章 XML 技术和Web 服务
20 示。
图12-32 查找刚添加的Web 服务
9) 单击找到的Web 服务,就可以看到刚定义的4个用于加、减、乘、除运算的方法,
如图12-33所示。
图12-33 4个用于加、减、乘、除运算的方法
10) 单击“添加引用”按钮,这样在Web 网页程序中就可以调用Web 服务定义的4种
方法。
11)
双击Web 设计页面,进入代码视图,首先定义
4个公用变量,具体代码如下:
12)
双击“
1”按钮,添加该按钮的单击事件代码,具体如下: