在Web开发中,动态生成XML文档是常见需求,但不同浏览器的实现差异显著。过去多数开发者习惯使用ActiveXObject创建XML,然而该对象仅适用于IE浏览器,在Firefox(火狐)中完全无法运行。为了实现跨浏览器兼容,同时避免依赖本地XML文件,最可靠的方案是采用标准DOM API动态构建XML。下面这个函数正是为此设计——纯前端生成,跨浏览器兼容。
function getXml() {
// 获取输入值
var name = textName.getValue();
var pwd = textPwd.getValue();
// 初始化对象
var xmlDoc = document.implementation.createDocument("", "", null);
xmlDoc.async="false"; // 取消xml在还没有完成数据完整填写就提交的动作
// xml头部编写
var header=xmlDoc.createProcessingInstruction("xml","version='1.0'");
xmlDoc.appendChild(header);
// 创建子树
var root = xmlDoc.createElement("loginInfo");
var username = xmlDoc.createElement("userName");
var userpassword = xmlDoc.createElement("passWord");
// 创建子树文本内容
var usernameText=xmlDoc.createTextNode(name);
var passwordText=xmlDoc.createTextNode(pwd);
// 子树文本内容挂载
username.appendChild(usernameText);
userpassword.appendChild(passwordText);
// 子树节点挂载
root.appendChild(username);
root.appendChild(userpassword);
// 根内容挂载
xmlDoc.appendChild(root);
// 返回xml文本内容
return xmlDoc;
};
而传统的基于IE专有对象的写法则存在严重的兼容缺陷——仅支持IE,其他浏览器一概不理:
var dom= new ActiveXObject()
若将上述ActiveXObject代码部署到Firefox中,将直接引发运行时错误。因此,为确保Firefox(火狐)用户也能正常使用,同时实现无需本地XML文件、完全动态生成,上述标准DOM方案才是最佳选择。该方案不限定浏览器类型,直接在内存中高效构建XML树,不依赖任何外部文件。

