0

我正在使用带有 Chorome 21 的 HTML5 FileAPI 来创建、读取和修改“users.xml”文件,第一次代码读取和修改 xml 时一切正常,但在第一次之后,阅读器不读取xml 正确,似乎 freader (我的 FileReader var 对象)保留了以前的结果并弄乱了新的读取操作。原始xml:

<?xml version='1.0' encoding='utf-8'?><users></users>

我的代码读取并添加了一个新的子节点:

    fs.root.getFile('users.xml', {}, function(fileEntry) {      
    fileEntry.file(function(file) { 
        var freader = new FileReader();             
        freader.onloadend = function(theFile) {                     
            console.log("before: " + this.result);

            var strcontent = this.result;
            fileEntry.createWriter(function(fileWriter) {                       

                var parsed = new DOMParser().parseFromString(strcontent, "text/xml");   

                var users= parsed.getElementsByTagName("users")[0];                                             

                var user = parsed.createElement("user");
                user.setAttribute('id',txt_rfc.value);
                var name = parsed.createElement("name");
                var textname = parsed.createTextNode(txt_name.value);
                name .appendChild(textname);
                user.appendChild(name);
                users.appendChild(user);                                                                                                                                                                    

                var serializer = new XMLSerializer();
                var str = serializer.serializeToString(parsed);
                                    console.log("after: " + str);
                var bb = new Blob([str],{type:'charset=utf-8'});    
                fileWriter.write(bb);                           

            }, errorHandler);
        };
        freader.readAsText(file);

    }, errorHandler);       
}, errorHandler);   

}

第一次执行正确地读取和写入 xml,如下所示:

<?xml version="1.0" encoding="utf-8"?><users><user id="1"><name>John</name></user></users>

但是下一次执行 FileReader 显示的是这样的读取结果(这是不正确的并且是错误的):

<?xml version='1.0' encoding='utf-8'?><users/>ser id="1"><name>John</name></user></users>

之后我的代码无法继续写入,因为 xml 读取结果“已损坏”。看起来 FileReader 需要“清除”或其他东西....有什么想法吗?谢谢!!

4

2 回答 2

0

像这样尝试 createTextNode() ,然后尝试解析 XML

   var tNode = document.createTextNode(this.result)    
   var parsed = new DOMParser().parseFromString(tNode.nodeValue, "text/xml");   
于 2012-09-04T10:45:46.277 回答
0

好的,我发现问题是 HTML5 FileSystem API 工作的异步方式,有时有点棘手。

我的代码片段是我真实代码的简化版本;我的真实代码对多个文件进行了多次修改,有时我连续多次调用原始函数,但由于 FileSystem API 行为是异步的,同一函数的不同实例试图同时修改同一个文件,这是“搞砸”文件。所以贴出来的代码片段工作正常,我只是添加了代码来检查之前的修改是否完成,然后再次调用该函数。

于 2012-09-05T18:28:34.113 回答