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小时内与您取得联系。