整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

JavaScript中装载XML文档

E和FierFox浏览器对于这装载同域的XML文件和装载XML字符串这两种情况,分别有各自的处理方式。IE的解析器支持XML文件和XML字符串的加载,而火狐浏览器使用单独的解析器把XML载入内存,然后转换为可通过JS访问的XML DOM对象。

以下是js代码:

/* 
 * 封装IE和Firefox类浏览器中装载同域XML或XML字符串的方法,
 * @param flag true表示装载XML的文件,false表示装载XML的字符串
 * @param xmldoc flag为true表示XML文件的路径,flag为false表示XML字符串
 */
 
function loadXML(flag,xmldoc){
 if(window.activeXObject) {
 //IE浏览器
 //创建空的XML对象
 var activexName = ["MSXML2.DOMDdcument","Miscrosoft.XmlDom"];
 var xmlObj;
 for(var i = 0; i < actviexName.length;i++){
 try{
 xmlObj = new ActiveXObject(activeName[i]);
 break;
 }catch(e){
 
 }
 }
 if(xmlObj){
 //同步方式装载XML数据,确保在文档完全加载之前解析器不会继续脚本的执行
 xmlObj.async = false;
 if(flag){
 //load用于加载文件,loadXML用于加载字符串
 //装载XML文件
 xmlObj.load(xmldoc);
 }else{
 //装载XML的字符串
 xmlObj.loadXML(xmldoc);
 }
 //返回根节点
 return xmlObj;
 //返回根元素节点
 return xmlObj.documentElement;
 }else{
 alert("装载XML文档的对象创建失败");
 return null;
 }
 }else if(document.implementation.creatDocument){
 //针对Firefox类浏览器
 var xmlObj;
 if(flag){
 //装载XML文件
 //先创建一个空的xml dom对象
 xmlObj = document.implementation.creatDocument("","",null);
 if(xmlObj){
 //同步方式进行装载
 xmlObj.async = false;
 xmlObj.load(xmldoc);
 return xmlObj.documentElement;
 }else{
 alert("装载XML文档的对象创建失败");
 return null;
 }
 }else{
 //装载XML的字符串
 //创建一个dom解析器
 xmlObj = new DOMParser();
 //把xml字符串解析成要返回的dom对象
 var docRoot = xmlObj.parerFromString(xmldoc,"test/xml");
 return docRoot.documentElement;
 }
 }
 alert("装载XML文档的对象创建失败");
 return null;
}

html代码

<html>
 <head>
 <title>TODO supply a title</title>
 <meta charset="UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <script type="text/javascript" src="load.js"></script>
 <script type="text/javascript">
 function test(){
 //装载同域的XML文件
 var domxml1 = loadXML(true,"test.xml");
 //装载XML字符串
 var domxml2 = loadXML(true,"<xml>123</xml>");
 alert("");
 }
 </script>
 </head>
 <body>
 <input type="button" value="test" onclick="test()"/>
 </body>
</html>

XML页内容

<?xml version="1.0" encoding="UTF-8"?>
<root>
 木子松就是我,我就是木子松
</root>

总结

对于装载同域的XML文件,IE浏览器和火狐类浏览器都是先创建一个空的XML文档对象,然后用“xmlDoc.load(“**.xml”)”告知解析器加载名为**.xml的XML文档

对于装载XML字符串,IE浏览器和装载XML文件的方式一样,利用微软内建的解析器加载XML字符串;而火狐类浏览器,则是通过"var parser = new DOMParser()"创建dom解析器,然后利用方法parserFromString()加载 XML字符串。另外DOMParser对象的load()方法可用于加载文件。

跨域访问处于安全方面的原因,现在的浏览器不允许跨域访问。如果想跨域访问,则必须把XML文件放到自己的服务器上,否则,xmlDoc.load()将产生错误“Access is denied”。

入dll

1.通过NuGet安装dll(2种方法)

1.1可以在Visual Studio中打开“解决方案资源管理器”,鼠标右键点击“引用”,“管理NuGet包”,然后搜索“Free Spire.Doc”,点击“安装”。等待程序安装完成。

1.2将以下内容复制到PM控制台安装:

Install-Package FreeSpire.Doc -Version 10.2

2.手动添加dll引用

可通过手动下载包到本地,然后解压,找到BIN文件夹下的Spire.Doc.dll。然后在Visual Studio中打开“解决方案资源管理器”,鼠标右键点击“引用”,“添加引用”,将本地路径BIN文件夹下的dll文件添加引用至程序。


将HTML转为XML

转换时,可参考如下代码来进行:

  1. 创建Document类的对象。
  2. 调用Document.LoadFromFile(string fileName, FileFormat fileFormat)方法加载HTML文档。
  3. 通过Document.SaveToFile(string fileName, FileFormat fileFormat)方法保存为XML格式到指定路径。

C#

using Spire.Doc;

namespace HTMLtoXML
{
    class Program
    {
        static void Main(string[] args)
        {
            //创建Document类的对象
            Document doc = new Document();

            //加载html文件
            doc.LoadFromFile("sample.html",FileFormat.Html);

            //保存为XML格式
            doc.SaveToFile("HTMLtoXML.xml", FileFormat.Xml);
            System.Diagnostics.Process.Start("HTMLtoXML.xml");
        }
    }
}

转换效果:

—End—

MLHTTPrequest 对象

Ajax 的核心是 JavaScript 对象 XmlHTTPRequest。该对象在 Internet Explorer 5 中首次引入,它是一种支持异步请求的技术。简而言之,XmlHTTPRequest 使您可以使用 JavaScript 向服务器提出请求并处理响应,而不阻塞用户。通过 XMLHTTPRequest 对象,Web 开发人员可以在页面加载以后进行页面的局部更新。

方法

open(String method,String url,boolean asynch,String username,String password)

send(content)

setRequestHeader(String header,String value)

getAllResponseHeaders()

getResponseHeader(String header)

abort()

常用详细解析

open():该方法创建 HTTP 请求

第一个参数是指定提交方式(post、get)

第二个参数是指定要提交的地址是哪

第三个参数是指定是异步还是同步(true 表示异步,false 表示同步)

第四和第五参数在 HTTP 认证的时候会用到,是可选的。

setRequestHeader(String header,String value):设置消息头(使用 post 方式才会使用到,

get 方法并不需要调用该方法)。

xmlHTTP.setRequestHeader("Content-type","application/x-www-form-urlencoded");

send(content):发送请求给服务器

如果是 get 方式,并不需要填写参数,或填写 null,如果是 post 方式,把要提交的参数写上去。

常用属性

onreadystatechange:请求状态改变的事件触发器(readyState 变化时会调用此方法),一般用于指定回调函数。

readyState:请求状态 readyState 一改变,回调函数被调用,它有 5 个状态:

0:未初始化

1:open 方法成功调用以后

2:服务器已经应答客户端的请求

3:交互中。HTTP 头信息已经接收,响应数据尚未接收。

4:完成。数据接收完成

responseText:服务器返回的文本内容

responseXML:服务器返回的兼容 DOM 的 XML 内容

status:服务器返回的状态码

statusText:服务器返回状态码的文本信息

回调函数是什么

回调函数就是接收服务器返回的内容!