📄 0903-0200.htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0071)http://162.105.170.55/ASPs/GetLearningArticleTemp.asp?section=0903-0200 -->
<HTML><HEAD><TITLE>XML中国论坛 - 初学进阶 - 9.3.2 HTTPXML对象技术</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<STYLE type=text/css>TABLE {
FONT-SIZE: 9pt; COLOR: black; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋体"
}
.pt9 {
FONT-SIZE: 9pt; COLOR: black; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋体"
}
.pt10 {
FONT-WEIGHT: 700; FONT-SIZE: 10pt; LINE-HEIGHT: 18pt; FONT-FAMILY: "宋体"
}
.TempOutline {
FONT-SIZE: 9pt; MARGIN-LEFT: 15pt; COLOR: #666666; TEXT-INDENT: -28pt; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋体"; TEXT-DECORATION: none
}
.TempOutline1 {
FONT-SIZE: 9pt; MARGIN-LEFT: 24pt; COLOR: #666666; TEXT-INDENT: -36pt; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋体"; TEXT-DECORATION: none
}
.Outline {
FONT-SIZE: 9pt; MARGIN-LEFT: 15pt; TEXT-INDENT: -28pt; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋体"; TEXT-DECORATION: none
}
.Outline1 {
FONT-SIZE: 9pt; MARGIN-LEFT: 24pt; TEXT-INDENT: -36pt; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋体"; TEXT-DECORATION: none
}
.Outline11 {
FONT-SIZE: 9pt; MARGIN-LEFT: 38pt; TEXT-INDENT: -50pt; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋体"; TEXT-DECORATION: none
}
.passage0 {
FONT-SIZE: 9pt; MARGIN-LEFT: 15pt; TEXT-INDENT: -28pt; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋体"; TEXT-DECORATION: none
}
.passage1 {
FONT-SIZE: 9pt; MARGIN-LEFT: 24pt; TEXT-INDENT: -36pt; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋体"; TEXT-DECORATION: none
}
.passage11 {
FONT-SIZE: 9pt; MARGIN-LEFT: 38pt; TEXT-INDENT: -50pt; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋体"; TEXT-DECORATION: none
}
.passage111 {
FONT-SIZE: 9pt; MARGIN-LEFT: 51pt; TEXT-INDENT: -64pt; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋体"; TEXT-DECORATION: none
}
</STYLE>
<META content="Microsoft FrontPage 5.0" name=GENERATOR></HEAD>
<BODY vLink=#000000 aLink=#000000 link=#000000 leftMargin=0 topMargin=0
onload=""><!-- 以下为主体内容 -->
<div align="center">
<center>
<TABLE border=0 width="100%" style="border-collapse: collapse" bordercolor="#111111" cellpadding="0" cellspacing="0">
<TBODY>
<TR vAlign=top>
<TD width=32 rowSpan=2></TD>
<TD vAlign=center width="854">
<p align="center"><IMG height=33
src="image/title_learner.gif" width=226></TD>
<TD width=31 rowSpan=2></TD>
</TR>
<TR vAlign=top>
<TD width="854" ><!-- 正文内容 -->
<DIV class=pt10><B>9.3.2 HTTPXML对象技术</B></DIV>
<DIV></DIV><BR>
<DIV class=pt9>
<P>尽管XML在多数情况下可以很好地描述数据,但是开发者有时却不得不使用CGI来进行浏览器和服务器之间的数据交换。这是,问题就出现了。从信息交换的角度来讲,虽然CGI是完全能够满足要求的,但是,当CGI同XML一起使用时就会掩盖XML自身的一些优点,从而使得XML在信息交换方面的优势无处找寻。</P>
<P>不过,微软对此已有自己的解决方案,它提供了一种更加有效的方法来传输XML——XMLHTTP。XMLHTTP是微软的又一项基于XML的数据交换技术,主要用于在服务器与客户端交换XML数据。该技术源于微软在其XML
DOM实现中引入的一个重要对象——XMLHttpRequest(Microsoft.XMLHTTP),它可以为客户端提供同HTTP服务器通讯的协议支持。简而言之,它允许你打开一个到服务器上的HTTP连接,然后发送和接受数据,并且利用Microsoft
XML DOM对返回数据进行解析。</P>
<P>使用XMLHTTP对象通常是进行XML数据交换,但也并不局限于此,其他格式的数据也是允许的。另外,通过同XSL相结合,XMLHTTP提供了一种便捷方式发送结构化查询字串到服务器,然后将返回结果在客户端以多种方式显示。这种交换类型的标准模式是客户端发送一个XML格式的文本字符串到服务器,然后服务器将这个字符串装载入一个XML
DOM对象中并进行解析,然后返回一段
HTML给客户端,或者是另外一段XML代码给客户端让客户端的浏览器自己解释。在这种方式下,对于信息的传递是非常有效的,尤其是当使用DHTML进行页面的动态显示时。</P>
<P>下面的一个例子描述了XMLHTTP的上述功能。假定我们在服务器端已有一个XML实例文档client.xml。</P>
<DIV align=center>
<CENTER>
<TABLE width="80%" border=1>
<TBODY>
<TR>
<TD width="100%"><?xml version = "1.0" encoding="GB2312"
standalone = "no"?><BR><BR><联系人列表><BR>
<联系人><BR>
<姓名>张三</姓名><BR>
<ID>1</ID><BR>
<公司>A公司</公司><BR>
<EMAIL>zhang@aaa.com</EMAIL><BR>
</联系人><BR><BR>
<联系人><BR>
<姓名>李四</姓名><BR>
<ID>2</ID><BR>
<公司>B公司</公司><BR>
<EMAIL>li@bbb.org</EMAIL><BR>
</联系人><BR></联系人列表></TD></TR></TBODY></TABLE></CENTER></DIV>
<P>下面的代码片段描述的是客户端发出请求界面,首先需要输入待查联系人的姓名和公司,点击"查询"按钮后,程序执行查询函数。该函数首先创建一个XMLHTTP对象——xmlHTTP,和一个XML
DOM对象——client,前者用于向服务器(http://localhost/Query.asp)发送XML数据(xmlHTTP.send(template.XMLDocument))和接收XML数据(xmlHTTP.responseXML.xml)。</P>
<DIV align=center>
<CENTER>
<TABLE width="80%" border=1>
<TBODY>
<TR>
<TD width="100%"><script language="JavaScript"><BR>function
QueryClient(){<BR> var xmlHTTP = new
ActiveXObject("Microsoft.XMLHTTP");<BR> var client =
template.XMLDocument.documentElement;
<P> xmlHTTP.Open("POST", "http://localhost/Query.asp",
false);</P>
<P> client.childNodes.item(0).text = cliName.value;<BR>
client.childNodes.item(1).text = cliCompany.value;</P>
<P> xmlHTTP.send(template.XMLDocument);<BR>
alert(xmlHTTP.responseXML.xml);<BR>}<BR></script><BR><BR>请输入待查联系人姓名:<input
type="text" name="cliName"><BR>请输入待查联系人公司:<input type="text"
name="cliCompany"><BR><input type="Button" value="查询"
onclick="QueryClient()"></P></TD></TR></TBODY></TABLE></CENTER></DIV>
<P>下面的代码片段(Query.asp)描述的则是服务器端的处理流程,首先创建两个XML
DOM对象,一个对应于XML文件client.xml(xmlClient.load(Server.MapPath("client.xml"))),另一个对应于是客户端传送的XML数据(queryClient.load(Request))。然后程序根据传送的XML数据构建XSL查询参数并进行节点定位,如果匹配成功,返回客户端查询到的XML数据;否则返回"<result>查无此人!</result>"的XML数据。</P>
<DIV align=center>
<CENTER>
<TABLE width="80%" border=1>
<TBODY>
<TR>
<TD width="100%">Response.contentType = "text/xml"
<P>set queryClient = Server.CreateObject("Microsoft.XMLDOM")<BR>set
xmlClient = Server.CreateObject("Microsoft.XMLDOM")</P>
<P>queryClient.async =
false<BR>queryClient.load(Request)<BR>xmlClient.async =
false<BR>xmlClient.load(Server.MapPath("client.xml"))</P>
<P>set xmlRoot = xmlClient.documentElement<BR>set queryRoot =
queryClient.documentElement</P>
<P>queryStr = "./联系人[姓名= " & queryRoot.childNodes.item(0).text
& " and 公司= " & queryRoot.childNode.item(1).text & "
]"<BR>set resultClient = xmlRoot.selectSingleNode(queryStr)</P>
<P>if isNull(resultClient) = false<BR> then
Response.write(resultClient.xml)<BR> else
Response.write("<result>查无此人!</result>")<BR>end
if</P></TD></TR></TBODY></TABLE></CENTER></DIV></DIV>
<P></P>
<P></P></TD></TR></TBODY></TABLE>
</center>
</div>
<P></P>
<P>
<P></P></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -