简单的加载 XML 文件函数

以下是一个用于加载 XML 文件的函数。它首先尝试在 Microsoft Internet Explorer 中运行,然后在 Firefox、Mozilla、Opera 等其他浏览器中运行:

function loadXMLDoc(xmlfilename) {
  var event = new Error();
  // 适用于 Internet Explorer
  try {
    var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
  } catch (event) {
    // 适用于 Firefox、Mozilla、Opera 和其他浏览器
    try {
      xmlDoc = document.implementation.createDocument("", "", null);
    } catch (event) {
      throw(event.message);
    }
  }

  try {
    xmlDoc.async = false; // 设置为同步加载
    xmlDoc.load(xmlfilename); // 加载 XML 文件
    return xmlDoc; // 返回加载的 XML 文档对象
  } catch (event) {
    throw(event.message); // 抛出错误信息
  }
  return null; // 如果加载失败,返回 null
}

使用方法

  1. 加载 XML 文件:

    var objXML = loadXMLDoc("filename.xml");
    
  2. 获取 XML 节点:

    var oNodes = objXML.getElementsByTagName("AnyTagYouWish");
    
  3. 现在你可以对 oNodes 执行任何 DOM 操作。


注意事项

  1. 客户端限制: 由于 JavaScript 是在客户端运行的,因此无法直接保存对 XML 的修改。要保存修改,通常需要将数据发送到服务器,并让服务器完成保存操作。

  2. 跨域问题: 如果尝试加载的 XML 文件来自不同的域名,则可能会受到浏览器的跨域限制(同源策略)。解决此问题可以使用 CORS 或通过服务器代理进行请求。

  3. 兼容性: 现代浏览器通常已经放弃对 ActiveXObject 的支持。因此,在现代环境下建议使用 fetch()XMLHttpRequest 加载 XML 文件。


推荐的现代替代方案

如果需要在现代浏览器中加载 XML 文件,建议使用以下方法:

function loadXMLFile(xmlfilename) {
  return fetch(xmlfilename)
    .then(response => response.text())
    .then(str => (new window.DOMParser()).parseFromString(str, "text/xml"))
    .catch(error => {
      console.error("Error loading XML:", error);
      return null;
    });
}

// 使用示例
loadXMLFile("filename.xml").then(xmlDoc => {
  if (xmlDoc) {
    const nodes = xmlDoc.getElementsByTagName("AnyTagYouWish");
    console.log(nodes);
  }
});

这种方式可以更好地支持现代浏览器,并避免使用过时的技术。

Last modified: Monday, 13 January 2025, 3:15 PM