日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

兼容IE、FireFox、Chrome等瀏覽器的xml處理函數(shù)js代碼

在編寫(xiě)處理xml的網(wǎng)頁(yè)時(shí),經(jīng)常為瀏覽器兼容性頭疼 。于是我將常用的xml操作封裝為函數(shù) 。經(jīng)過(guò)一段時(shí)間的改進(jìn),現(xiàn)在已經(jīng)很穩(wěn)定了,用起來(lái)很舒服 。
函數(shù)有——
xml_loadFile:xml同步/異步加載 。
xml_transformNode:xsl轉(zhuǎn)換 。
xml_text:節(jié)點(diǎn)的文本 。
selectSingleNode:根據(jù)XPath選擇單個(gè)節(jié)點(diǎn) 。
selectNodes:根據(jù)XPath選擇多個(gè)節(jié)點(diǎn) 。
全部代碼(zyllibjs_xml.js)——
復(fù)制代碼 代碼如下:
/*
zyllibjs_xml
XML處理
@author zyl910
注意——
1. Chrome 由于其安全機(jī)制限制, 不能讀取本地文件 。
Reference
~~~~~~~~~
http://www.jinlie.net/?p=302
Chrome瀏覽器加載XML文檔
Update
~~~~~~
[2011-11-02]
定義 。
[2011-11-09]
xml_loadFile: 為回調(diào)函數(shù)加上isError參數(shù) 。
[2011-11-21]
selectSingleNode
selectNodes
*/
// 加載XML文件并返回XML文檔節(jié)點(diǎn)
// return: 成功時(shí)返回一個(gè)對(duì)象(同步模式下返回xml文檔對(duì)象,異步模式下返回操作對(duì)象),失敗時(shí)返回空 。
// xmlUrl: xml文件的url 。
// funcAsync: 回調(diào)函數(shù). function onload(xmlDoc, isError){ ... }
function xml_loadFile(xmlUrl, funcAsync)
{
var xmlDoc = null;
var isChrome = false;
var asyncIs = (null!=funcAsync); // 是否是異步加載 。當(dāng)funcAsync不為空時(shí),使用異步加載,否則是同步加載 。
// 檢查參數(shù)
if (""==xmlUrl) return null;
if (asyncIs)
{
if ("function"!=typeof(funcAsync)) return null;
}
// 創(chuàng)建XML對(duì)象
try
{
xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); // Support IE
}
catch(ex)
{
}
if (null==xmlDoc)
{
try
{
// Support Firefox, Mozilla, Opera, etc
xmlDoc = document.implementation.createDocument("", "", null); // 創(chuàng)建一個(gè)空的 XML 文檔對(duì)象 。
}
catch(ex)
{
}
}
if (null==xmlDoc) return null;
// 加載XML文檔
xmlDoc.async = asyncIs;
if (asyncIs)
{
if(window.ActiveXObject)
{
xmlDoc.onreadystatechange = function(){
if(xmlDoc.readyState == 4)
{
var isError = false;
if (null!=xmlDoc.parseError)
{
isError = (0!=xmlDoc.parseError.errorCode); // 0成功, 非0失敗 。
}
funcAsync(xmlDoc, isError);
}
}
}
else
{
xmlDoc.onload = function(){
funcAsync(xmlDoc, false);
}
}
}
try
{
xmlDoc.load(xmlUrl);
}
catch(ex)
{
// alert(ex.message) // 如果瀏覽器是Chrome,則會(huì)catch這個(gè)異常:Object # (a Document) has no method "load"
isChrome = true;
xmlDoc = null;
}
if (isChrome)
{
var xhr = new XMLHttpRequest();
if (asyncIs) // 異步
{
xhr.onreadystatechange = function(){
if(xhr.readyState == 4)
{
funcAsync(xhr.responseXML, xhr.status != 200);
}
}
xhr.open("GET", xmlUrl, true);
try // 異步模式下,由回調(diào)函數(shù)處理錯(cuò)誤 。
{
xhr.send(null);
}
catch(ex)
{
funcAsync(null, true);
return null;
}
return xhr; // 注意:返回的是XMLHttpRequest 。建議異步模式下僅用null測(cè)試返回值 。
}
else // 同步
{
xhr.open("GET", xmlUrl, false);
xhr.send(null); // 同步模式下,由調(diào)用者處理異常
xmlDoc = xhr.responseXML;
}
}
return xmlDoc;
}
// 使用XSLT把XML文檔轉(zhuǎn)換為一個(gè)字符串 。
function xml_transformNode(xmlDoc, xslDoc)
{
if (null==xmlDoc) return "";
if (null==xslDoc) return "";
if (window.ActiveXObject) // IE
{
return xmlDoc.transformNode(xslDoc);
}
else // FireFox, Chrome
{
//定義XSLTProcesor對(duì)象
var xsltProcessor=new XSLTProcessor();
xsltProcessor.importStylesheet(xslDoc);
// transformToDocument方式
var result=xsltProcessor.transformToDocument(xmlDoc);
var xmls=new XMLSerializer();
var rt = xmls.serializeToString(result);
return rt;
}
}
// 得到節(jié)點(diǎn)的文本

推薦閱讀