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瀏覽器 //創(chuàng)建空的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數據,確保在文檔完全加載之前解析器不會繼續(xù)腳本的執(zhí)行 xmlObj.async=false; if(flag){ //load用于加載文件,loadXML用于加載字符串 //裝載XML文件 xmlObj.load(xmldoc); }else{ //裝載XML的字符串 xmlObj.loadXML(xmldoc); } //返回根節(jié)點 return xmlObj; //返回根元素節(jié)點 return xmlObj.documentElement; }else{ alert("裝載XML文檔的對象創(chuàng)建失敗"); return null; } }else if(document.implementation.creatDocument){ //針對Firefox類瀏覽器 var xmlObj; if(flag){ //裝載XML文件 //先創(chuàng)建一個空的xml dom對象 xmlObj=document.implementation.creatDocument("","",null); if(xmlObj){ //同步方式進行裝載 xmlObj.async=false; xmlObj.load(xmldoc); return xmlObj.documentElement; }else{ alert("裝載XML文檔的對象創(chuàng)建失敗"); return null; } }else{ //裝載XML的字符串 //創(chuàng)建一個dom解析器 xmlObj=new DOMParser(); //把xml字符串解析成要返回的dom對象 var docRoot=xmlObj.parerFromString(xmldoc,"test/xml"); return docRoot.documentElement; } } alert("裝載XML文檔的對象創(chuàng)建失敗"); 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瀏覽器和火狐類瀏覽器都是先創(chuàng)建一個空的XML文檔對象,然后用“xmlDoc.load(“**.xml”)”告知解析器加載名為**.xml的XML文檔
對于裝載XML字符串,IE瀏覽器和裝載XML文件的方式一樣,利用微軟內建的解析器加載XML字符串;而火狐類瀏覽器,則是通過"var parser=new DOMParser()"創(chuàng)建dom解析器,然后利用方法parserFromString()加載 XML字符串。另外DOMParser對象的load()方法可用于加載文件。
跨域訪問處于安全方面的原因,現在的瀏覽器不允許跨域訪問。如果想跨域訪問,則必須把XML文件放到自己的服務器上,否則,xmlDoc.load()將產生錯誤“Access is denied”。
分享成果,隨喜正能量】行走于塵世,繁忙的工作節(jié)奏,沉重的生活壓力,似乎想讓生活過得行云流水,真的不是一件容易的事情,那么何不讓它變得簡單一些?或許我們不夠時尚,至少我們可以簡約,或許我們不夠精致,至少我們可以簡潔。把每一段旅途,都當做最好的修行;把每一段旅途遇到的困難,都當做自己的助力;把每一段旅途中遇到的人,都當做今生的因緣。
《VBA信息獲取與處理》教程是我推出第六套教程,目前已經是第一版修訂了。這套教程定位于最高級,是學完初級,中級后的教程。這部教程給大家講解的內容有:跨應用程序信息獲得、隨機信息的利用、電子郵件的發(fā)送、VBA互聯網數據抓取、VBA延時操作,剪貼板應用、Split函數擴展、工作表信息與其他應用交互,FSO對象的利用、工作表及文件夾信息的獲取、圖形信息的獲取以及定制工作表信息函數等等內容。程序文件通過32位和64位兩種OFFICE系統(tǒng)測試。是非常抽象的,更具研究的價值。
教程共兩冊,八十四講。今日的內容是專題六“VBA中利用XMLHTTP完成網抓數據”的第1講:XMLHTTP的簡單講解
現在的社會是網絡的社會,離開了網絡,很多工作會變得不通暢。我們日常的生活也是和網絡緊密聯系一起的,那么網絡是如何搭建的呢?我們可以通過本講的講解了解到HTTP 超文本傳輸協(xié)議,TCP/IP的介紹,XMLHTTP的介紹,等等。
1) XML的介紹 XML指可擴展標記語言(EXtensible Markup Language),設計宗旨是傳輸數據,是W3C (萬維網聯盟World Wide Web Consortium)的推薦標準。XML 是各種應用程序之間進行數據傳輸的最常用的工具,并且在信息存儲和描述領域變得越來越流行。
2) HTTP的介紹 HTTP 超文本傳輸協(xié)議(HyperText Transfer Protocol,超文本傳輸協(xié)議)是因特網上應用最為廣泛的一種網絡傳輸協(xié)議,所有的WWW文件都必須遵守這個標準。
HTTP是一個基于TCP/IP通信協(xié)議來傳遞數據(HTML 文件, 圖片文件, 查詢結果等)。
3) TCP/IP的介紹 TCP/IP是供已連接因特網的計算機進行通信的通信協(xié)議(Transmission Control Protocol / Internet Protocol)。定義了電子設備(比如計算機)如何連入因特網,以及數據如何在它們之間傳輸的標準。
TCP 用于應用程序之間的通信。當應用程序希望通過 TCP 與另一個應用程序通信時,它會發(fā)送一個通信請求。這個請求必須被送到一個確切的地址。在雙方“握手”之后,TCP 將在兩個應用程序之間建立一個全雙工 (full-duplex) 的通信。這個全雙工的通信將占用兩個計算機之間的通信線路,直到它被一方或雙方關閉為止。
IP 用于計算機之間的通信。IP 是無連接的通信協(xié)議。它不會占用兩個正在通信的計算機之間的通信線路。這樣,IP 就降低了對網絡線路的需求。每條線可以同時滿足許多不同的計算機之間的通信需要。通過 IP,消息(或者其他數據)被分割為小的獨立的包,并通過因特網在計算機之間傳送。IP 負責將每個包路由至它的目的地。
TCP/IP協(xié)議意味著 TCP 和 IP 在一起協(xié)同工作。TCP 負責應用軟件(比如你的瀏覽器)和網絡軟件之間的通信。IP 負責計算機之間的通信。TCP 負責將數據分割并裝入 IP 包,然后在它們到達的時候重新組合它們。IP 負責將包發(fā)送至接受者。
4) XMLHTTP的介紹 XMLHTTP是一套可以在Javascript、VbScript、Jscript等腳本語言中通過http協(xié)議傳送或從接收XML及其他數據的一套API。XmlHttp最大的用處是可以更新網頁的部分內容而不需要刷新整個頁面。
來自MSDN的解釋:XmlHttp提供客戶端同http服務器通訊的協(xié)議。客戶端可以通過XmlHttp對象(MSXML2.XMLHTTP.3.0)向http服務器發(fā)送請求并使用微軟XML文檔對象模型Microsoft? XML Document Object Model (DOM)處理回應。
現在的絕對多數瀏覽器都增加了對XmlHttp的支持,IE中使用ActiveXObject方式創(chuàng)建XmlHttp對象,其他瀏覽器如:Firefox、Opera等通過window.XMLHttpRequest來創(chuàng)建xmlhttp對象.
1)創(chuàng)建XMLHTTP對象 //需MSXML4.0支持
2)打開與服務端的連接,同時定義指令發(fā)送方式,服務網頁(URL)和請求權限等。客戶端通過Open命令打開與服務端的服務網頁的連接。與普通HTTP指令傳送一樣,可以用"GET"方法或"POST"方法指向服務端的服務網頁。
3)發(fā)送指令。
4)等待并接收服務端返回的處理結果。
5)釋放XMLHTTP對象
1) XMLHTTP的常見屬性:
onreadystatechange:在同步執(zhí)行方式下獲得返回結果的事件句柄。只能在DOM中調用。
responseBody: 結果返回為無符號整數數組。
responseStream: 結果返回為IStream流。
responseText: 結果返回為字符串。
responseXML: 結果返回為XML格式數據。
2) XMLHTTP的常用方法:
① Open(bstrMethod, bstrUrl, varAsync, bstrUser, bstrPassword)創(chuàng)建一個新的http請求,并指定此請求的方法、URL以及驗證信息(用戶名/密碼)打開指定網址
bstrMethod: 數據傳送方式,即GET或POST。
bstrUrl: 服務網頁的URL。
varAsync: 是否同步執(zhí)行。缺省為True,即同步執(zhí)行,但只能在DOM中實施同步執(zhí)行。用中一般將其置為False,即異步執(zhí)行。
bstrUser: 用戶名,可省略。
bstrPassword:用戶口令,可省略。
setRequestHeader(bstrHeader, bstrvalue)
bstrHeader:HTTP 頭(header)
bstrvalue: HTTP 頭(header)的值
如果Open方法定義為POST,可以定義表單方式上傳:
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
② Send(varBody)發(fā)送請求到http服務器并接收回應
varBody:指令集。可以是XML格式數據,也可以是字符串,流,或者一個無符號整數數組。也可以省略,讓指令通過Open方法的URL參數代入。
③ abort 取消當前請求
④ getAllResponseHeaders 獲取響應的所有http頭
⑤ getResponseHeader 從響應信息中獲取指定的http頭
以上我給出了一些常用的屬性和方法,其他的大家可以參考相關的資料,或許我在今后的課程中會用到時講解。同時我們還要主要下面的注意點:
1、ResponseBody是二進制的數據,是服務器傳來的沒有經過任何加工的數據。
2 ResponseText是按照utf-8編碼把ResponseBody轉換而成,也就是:ResponseText=ByteToStr(ResponseBody,"UTF-8")
本節(jié)知識點回向:了解一些概念,HTTP,TCP/IP,XMLHTTP,以及XMLHTTP的常用屬性和方法。
我20多年的VBA實踐經驗,全部濃縮在下面的各個教程中,教程學習順序:
現代網絡技術的世界中,XML(可擴展標記語言)和 HTML(超文本標記語言) 是兩個非常重要的技術。盡管它們都使用標簽和屬性的格式來描述數據,但它們在形式和用途上有顯著的區(qū)別。
XML,即 Extensible Markup Language(可擴展標記語言),是一種用于存儲和傳輸數據的文本格式。XML 的設計宗旨是強調數據的結構化和準確性,提供了一種公認的標準格式。最主要的特點是它的自我描述性,即數據和數據的定義集成在一起,使得它在數據交換和數據存儲方面具有極大優(yōu)勢。
而 HTML,即 HyperText Markup Language(超文本標記語言),則是一種用于創(chuàng)建網頁的標準標記語言。HTML 的主要用途是描述網頁的內容和結構,通過與 CSS(層疊樣式表)和 JavaScript(腳本語言)的結合,實現豐富和互動的網絡應用。
<book>
<title>Learning XML</title>
<author>John Doe</author>
<price>29.99</price>
</book>
<!DOCTYPE html>
<html>
<head>
<title>My Web Page</title>
</head>
<body>
<h1>Welcome to My Web Page</h1>
<p>This is an introductory paragraph.</p>
</body>
</html>
下面使用 Apifox 來修正和測試基于 XML 的 API 請求。
假設您需要向服務器發(fā)送 XML 格式的注冊信息。您可以按照以下步驟使用 Apifox 進行設置:
<userRegistration>
<username>john_doe</username>
<password>securePassword123</password>
<email>john_doe@example.com</email>
</userRegistration>
<userRegistrationResponse>
<userId>12345</userId>
<username>john_dane</username>
<status>success</status>
</userRegistrationResponse>
打開 Apifox,選擇開始新項目或者繼續(xù)現有項目。接著點擊“新建接口”,在接口設置頁面,選擇 POST 作為請求方法,并輸入正確的請求 URL,比如 https://api.example.com/register (這里的 URL 應替換為真實可用的 URL)。在配置請求體時,選擇 XML 格式,并將上述 XML 數據粘貼到配置區(qū)。
配置完成后,轉到“運行測試”頁面,點擊“發(fā)送”按鈕以向服務器發(fā)送構建的請求。請求發(fā)送后,檢查響應部分,您應該看到類似于提供的 XML 格式的響應數據。
您還可以使用響應界面上的預覽功能,該功能能讓您以更直觀的方式查看服務器返回的數據。
XML 和 HTML 雖然在標簽和屬性的語法上有所相似,但它們在使用場景、結構和功能上有顯著的區(qū)別。XML 強調數據的準確傳輸和結構化存儲,適合用于數據的交換和持久化存儲等場景。而 HTML 強調內容呈現和用戶交互,主要用于網頁設計和開發(fā)。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。