xml文件中特殊字符的处理
在XML中,起始和结束标记之间出现的所有合法字符都被忠实地传给XML处理程序。 为了避免把字符数据和标记中需要用到的一些特殊符号相混淆,XML还提供了一些有用的 实体引用。实体引用的作用是,当在字符数据中需要使用这些特殊符号时,我们采用它的 实体引用来代替。这些特殊的XML实体引用包括:
> >
< <
& &
" "
’'
这样,如果我们需要在"示例"这个标记中出现文本
"<姓名>张三</姓名>"
正确的写法应该是:
示例〉<姓名>张三</姓名>〈/示例〉
容易理解,字符"〈"的实体引用是必不可少的,为"〉"设立实体引用同样是为了避免与标记混淆,而字符"&"的实体引用则防止它与实体引用中开头所用的"&"相混淆。那么,我们什么时候需要用到剩下两个字符的实体引用呢?在标记中可以为标记设立属性,而XML规定属性值必须用"""括起来。因此,当属性值中出现字符"""时,需要将它用实体引用代替。请看下面的例子:
<STATEMENT VALUE = "She said, "Don t go there!"">
正确的写法应该是:
<STATEMENT VALUE = "She said, "Don't go there!"">
还有一个方法,用<![CDATA[显示的内容]]>
如:
<?xml version="1.0">
<T>
<![CDATA[测试各种不同的符号,;'" &]]>
</>
XMLHTTP应用参考
一、使用步骤:
1、创建XMLHTTP对象 //需MSXML4.0支持
2、打开与服务端的连接,同时定义指令发送方式,服务网页(URL)和请求权限等。客户端通过Open命令打开与服务端的服务网页的连接。与普通HTTP指令传送一样,可以用"GET"方法或"POST"方法指向服务端的服务网页。
3、发送指令。
4、等待并接收服务端返回的处理结果。
5、释放XMLHTTP对象
二、XMLHTTP方法:
Open( bstrMethod, bstrUrl, varAsync, bstrUser, bstrPassword )
bstrMethod: 数据传送方式,即GET或POST。
bstrUrl: 服务网页的URL。
varAsync: 是否同步执行。缺省为True,即同步执行,但只能在DOM中实施同步执行。用中一般将其置为False,即异步执行。
bstrUser: 用户名,可省略。
bstrPassword:用户口令,可省略。
Send( varBody )
varBody:指令集。可以是XML格式数据,也可以是字符串,流,或者一个无符号整数数组。也可以省略,让指令通过Open方法的URL参数代入。
setRequestHeader( bstrHeader, bstrvalue )
bstrHeader:HTTP 头(header)
bstrvalue: HTTP 头(header)的值
如果Open方法定义为POST,可以定义表单方式上传:
xmlhttp.setRequestHeader( "Content-Type", "application/x-www-form-urlencoded")
三、XMLHTTP属性:
onreadystatechange:在同步执行方式下获得返回结果的事件句柄。只能在DOM中调用。
responseBody: 结果返回为无符号整数数组。
responseStream: 结果返回为IStream流。
responseText : 结果返回为字符串。
responseXML: 结果返回为XML格式数据。
四、示例:
< script language="javascript" >
function getDatal(url){
var xmlhttp = new ActiveXObject("MSXML2.XMLHTTP.4.0");//创建XMLHTTPRequest对象,需MSXML4.0支持 ["MSXML2.XMLHTTP.4.0","MSXML2.DOMDocument.4.0"]
xmlhttp.open("POST",url,false,"",""); //使用HTTP GET初始化HTTP请求
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded") ;
xmlhttp.send("param=aa"); //发送HTTP请求并获取HTTP响应
return xmlhttp.responseText; //获取返回结果字符串
}
< /script >
完整的无刷新XMLHTTP实现二级联动下拉框的完整示例
以下为页面代码:
<form id="Form1" method="post" runat="server">
<asp:DropDownList id="DropDownList1" runat="server"></asp:DropDownList>
<asp:DropDownList id="DropDownList2" runat="server"></asp:DropDownList>
<SCRIPT LANGUAGE="JavaScript">
<!--
//以XML求取数据
function XmlPost(obj)
{
var svalue = obj.value;
var webFileUrl = "?brc_id=" + svalue;
var result = "";
var xmlHttp = new ActiveXObject("MSXML2.XMLHTTP");
xmlHttp.open("POST", webFileUrl, false);
xmlHttp.send("");
result = xmlHttp.responseText;
if(result != "")
{
document.all("DropDownList2").length=0;
var piArray = result.split(",");
for(var i=0;i<piArray.length;i++)
{
var ary1 = piArray[i].toString().split("|");
//alert(ary1[0].toString());
document.all("DropDownList2").options.add(new Option(ary1[1].toString(),ary1[0].toString()));
}
}
else
{
alert(result);
}
}
//-->
</SCRIPT>
</form>
XMLHTTP应用的一个实例
1、客户端:
function callXMLHttp()
{
var strurl;
var result;
strurl = XMLHttpServer.aspx?strID=100;
var objHttp = new ActiveXObject(Microsoft.XMLHTTP);
objHttp.open(get, strurl, false);
objHttp.send();
result = objHttp.ResponseText;
}
2、服务器端:
private void Page_Load(object sender, System.EventArgs e)
{
if (Request.QueryString.Keys.Count > 0 && Request.QueryString[strID].Length > 0)
{
strID = Request.QueryString[strID].ToString();
}
Response.Write(要返回的值);
}
还有一种写法:
function Test(objSrc,objDes)
{
try {
xmlHttp = new ActiveXObject(Microsoft.XMLHTTP);
} catch(e) {
xmlHttp = new XMLHttpRequest();
}
xmlHttp.onreadystatechange = function() {
if (xmlHttp.readyState == 4) {
if (xmlHttp.status == 200) {
var data = xmlHttp.responseText;
document.getElementById(objDes).value = data;
}
}
}
xmlHttp.open(GET,CodeNameServer.aspx?testid= + objSrc.value);
xmlHttp.send(null);
}
XMLHTTP---介绍
Set objXML = CreateObject(Msxml2.XMLHTTP) 或
Set objXML = CreateObject(“Microsoft.XMLHTTP”)
' Or, for version 3.0 of XMLHTTP, use:
' Set xml = Server.CreateObject(MSXML2.ServerXMLHTTP)
poster.open http-method, url, async, userID, password
Open方法中包含了5个参数,前三个是必要的,后两个是可选的(在服务器需要进行身份验证时提供)。参数的含义如下所示:
http-method: HTTP的通信方式,比如GET或是 POST
url: 接收XML数据的服务器的URL地址。通常在URL中要指明 ASP或CGI程序
async: 一个布尔标识,说明请求是否为异步的。如果是异步通信方式(true),客户机就不等待服务器的响应;如果是同步方式(false),客户机就要等到服务器返回消息后才去执行其他操作
userID 用户ID,用于服务器身份验证
password 用户密码,用于服务器身份验证
用Open方法对Request对象进行初始化后,调用Send方法发送XML数据:
poster.send XML-data
Send方法的参数类型是Variant,可以是字符串、DOM树或任意数据流。发送数据的方式分为同步和异步两种。在异步方式下,数据包一旦发送完毕,就结束Send进程,客户机执行其他的操作;而在同步方式下,客户机要等到服务器返回确认消息后才结束Send进程。
XMLHTTP对象中的readyState属性能够反映出服务器在处理请求时的进展状况。客户机的程序可以根据这个状态信息设置相应的事件处理方法。属性值及其含义如下表所示:
值 说明
0 Response对象已经创建,但XML文档上载过程尚未结束
1 XML文档已经装载完毕
2 XML文档已经装载完毕,正在处理中
3 部分XML文档已经解析
4 文档已经解析完毕,客户端可以接受返回消息
客户机接收到返回消息后,进行简单的处理,基本上就完成了C/S之间的一个交互周期。客户机接收响应是通过XMLHTTP对象的属性实现的:
● responseTxt:将返回消息作为文本字符串;
● responseXML:将返回消息视为XML文档,在服务器响应消息中含有XML数据时使用;
● responseStream:将返回消息视为Stream对象
或者remote好多了.(前提:服务器端和客户端都必须安装IE5或者更高版本),在俺贴的
那个无刷新在线信息功能使用的也是这种技术.有兴趣的朋友可以看看..
//STR参数是传入的XML数据,你也可以传入其他文本数据.
//不过这个函数需要服务器端处理之后返回XML数据,你也可以修改一下
//URL参数表示你所要处理数据的ASP文件地址
{
var Http = new ActiveXObject(Microsoft.XMLHTTP) //建立XMLHTTP对象
var Dom = new ActiveXObject(Microsoft.XMLDOM) //建立XMLDOM对象
Http.open(POST,URL,false)
//第一个参数的意思是,用POST方式发送数据.可以大到4MB,也可以换为GET.只能256KB
//第2个参数的意思是数据发送到哪个文件处理
//第3个参数意思是同步或异步方式.TRUE为异步,FALSE为同步
Http.send(Str) //开始发送数据.............嘟嘟..
Dom.async=false //设置为同步方式获取数据
Dom.loadXML(Http.responseText)
//开始获取服务器端处理后返回的数据.我在这里设置必须为XML数据,否则出错.
//你也可以自己修改.使返回的是2进制或者记录集数据.................................
if(Dom.parseError.errorCode != 0) //检查是否发生获取数据时错误
{
delete(Http)
delete(Dom)
return(false)
}
else
{
var Back = Dom.documentElement.childNodes.item(0).text
//得到返回的XML数据,我这里假设处理程序只返回一行XML数据(一个节点)
delete(Http)
delete(Dom)
return(Back) //函数返回数据.......................结束
}
}
XMLHTTP下载远程数据输出到浏览器
利用xmlhttp对象获取远程的数据,然后用二进制输出到客户浏览器,让客户下载数据,此例从某一远程服务器获取一个压缩包,并且输出到浏览器提供客户下载.
程序代码:
<%
Response.Buffer = True
Dim objXMLHTTP, xml
Set xml = Server.CreateObject(Microsoft.XMLHTTP) '创建对象
xml.Open GET,http://www.4guysfromrolla.com/webtech/code/mitchell-pres.zip,False ' '设置对象,具体xmlhttp详细使用方法请见:http://www.cnsxml.com/blogview.asp?logID=273 《XMLHTTP 对象及其方法》一文
xml.Send '发送请求
Response.AddHeader Content-Disposition, attachment;filename=mitchell-pres.zip '添加头给这个文件
Response.ContentType = application/zip '设置输出类型
Response.BinaryWrite xml.responseBody ’输出二进制到浏览器
Set xml = Nothing
%>
在.NET中利用XMLHTTP下载文件
using MSXML2;
下面就是主要的代码:
private void Page_Load(object sender, System.EventArgs e)
{
string Url = http://dotnet.aspx.cc/Images/logoSite.gif;
string StringFileName = Url.Substring(Url.LastIndexOf(/) + 1);
string StringFilePath = Request.PhysicalApplicationPath;
if(!StringFilePath.EndsWith(/)) StringFilePath += /;
MSXML2.XMLHTTP _xmlhttp = new MSXML2.XMLHTTPClass();
_xmlhttp.open(GET,Url,false,null,null);
_xmlhttp.send();
if( _xmlhttp.readyState == 4 )
{
if(System.IO.File.Exists(StringFilePath + StringFileName))
System.IO.File.Delete(StringFilePath + StringFileName);
System.IO.FileStream fs = new System.IO.FileStream(StringFilePath + StringFileName, System.IO.FileMode.CreateNew);
System.IO.BinaryWriter w = new System.IO.BinaryWriter(fs);
w.Write((byte[])_xmlhttp.responseBody);
w.Close();
fs.Close();
Response.Write (文件已经得到。<br><a href=' + Request.ApplicationPath + StringFileName +' target='_blank'>);
Response.Write (查看 + StringFileName + </a>);
}
else
Response.Write (_xmlhttp.statusText);
Response.End();
}
XmlHttp异步获取网站数据的例子
<script>
var oDiv
var xh
function getXML()
{
oDiv = document.all.m
oDiv.innerHTML = 正在装载栏目数据,请稍侯.......
oDiv.style.display=
xh = new ActiveXObject(Microsoft.XMLHTTP)
xh.onreadystatechange = getReady
xh.open(GET,a.value,true)
xh.send()
}
function getReady()
{
if(xh.readyState==4)
{
if(xh.status==200)
{
oDiv.innerHTML = 完成
}
else
{
oDiv.innerHTML = 抱歉,装载数据失败。原因: + xh.statusText
}
}
}
</script>
<body>
xmlhttp异步的例子:
URL:<input name=a value=http://www.microsoft.com style=width:600px>
<input onclick=getXML() type=button value=得到源代码>
<input onclick=if(xh && xh.responseText) {alert(xh.responseText);oDiv.innerHTML=xh.responseText} type=button value=显示源代码>
<div id=m></div>