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”。
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文件添加引用至程序。
轉換時,可參考如下代碼來進行:
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—
文以C#及VB.NET后端程序代碼示例展示如何將HTML轉為XML文件。轉換時,調用Word API -Free Spire.Doc for .NET 提供的文檔加載方法及文檔保存的方法來實現。轉換的代碼步驟很簡單,具體可參考以下內容。
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文件添加引用至程序。
轉換時,可參考如下代碼來進行:
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");
}
}
}
vb.net
Imports Spire.Doc
Namespace HTMLtoXML
Class Program
Private Shared Sub Main(args As String())
'創建Document類的對象
Dim doc As New Document()
'加載html文件
doc.LoadFromFile("sample.html", FileFormat.Html)
'保存為XML格式
doc.SaveToFile("HTMLtoXML.xml", FileFormat.Xml)
System.Diagnostics.Process.Start("HTMLtoXML.xml")
End Sub
End Class
End Namespace
轉換效果:
—End—
*請認真填寫需求信息,我們會在24小時內與您取得聯系。