【问题标题】:JavaScript - Upload and read XML file on the client sideJavaScript - 在客户端上传和读取 XML 文件
【发布时间】:2014-01-23 19:54:11
【问题描述】:

我正在处理这个需要我在客户端处理 XML 文件的项目。 这是场景: 用户要上传一个 XML 文件,此时应该读取 XML 文件的结构,并且需要根据 XML 文件中的信息填充表格。创建表并填充它没有问题,但我想知道的是我可以在将 XML 文件上传到服务器之前对其进行处理吗?

function parseXML(xml_file){
        if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
            xmlhttp = new XMLHttpRequest();
        } else {// code for IE6, IE5
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
        //xmlhttp.open("GET", "books.xml", false);
        xmlhttp.open("GET",xml_file , false);
        xmlhttp.send();
        xmlDoc = xmlhttp.responseXML; 
        alert(xmlDoc);
    }

当我在处理文件后使用上面的代码时,xmlDoc 将为空...

function handleFileSelect(evt) {
    // FileList object  
        var files = evt.target.files;
    //var contents = evt.target.result;
    //alert(contents);
    parseXML(files[0]);


    // files is a FileList of File objects. List some properties.
    var output = [];
    for (var i = 0, f; f = files[i]; i++) {
        output.push('<li><strong>', escape(f.name), '</strong> (', f.type || 'n/a', ') - ', f.size, ' bytes, last modified: ', f.lastModifiedDate ? f.lastModifiedDate.toLocaleDateString() : 'n/a', '</li>');
    }
    document.getElementById('file_list').innerHTML = '<ul>' + output.join('') + '</ul>';
}

有没有办法做到这一点?当然我可以用 php 来做到这一点……将文件上传到服务器,刷新页面并使用 JavaScript 读取最近上传的文件。但是有没有办法在不将 XML 文件上传到服务器的情况下实现这一点?

DOMParse 需要文件路径才能打开:

xhttp.open("GET","books.xml",false)

有没有办法使用 FileReader 读取文件并将实际文件而不是路径传递给 xhttp.open?

【问题讨论】:

  • FileReader 读取文件,DomParser 解析 XML。
  • 我查看了 FileReader,但不确定如何使用 FileReader 返回文件。在某些时候,DOMParser 需要打开文件,所以我应该提供什么作为参数:xhttp.open("GET","books.xml",false);

标签: javascript php xml file-upload client-side


【解决方案1】:

这仅适用于兼容 HTML5 的浏览器:

  1. 使用FileReader获取文件数据

  2. 使用 DOMParser 将文件解析为字符串:

.

var parser = new DOMParser();
var doc = parser.parseFromString( fileAsString, "application/xml");

【讨论】:

  • so fileAsString 将文件的内容作为字符串?如果字符串太大怎么办?我很确定我项目中的 XML 文件将包含大量信息。内容大小是否会导致任何问题?
  • @Ali.B fileAsString 是您在 ajax 调用中创建并“填充”数据的东西。大小没有标准限制,但会受到浏览器可用 RAM 以及 CPU 和 JavaScript 速度的限制。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-10
  • 2021-03-20
  • 2012-01-23
  • 1970-01-01
  • 2014-08-30
  • 1970-01-01
相关资源
最近更新 更多