从解压缩的ZIP中读取XML文件

时间:2016-11-27 11:37:25

标签: javascript xml zip extract

我有一个XML文件,如:

<People>
    <Person>
        <Name>John</Name>
        <Lastname>Doe</Lastname>
        <Age>30</Age>
    </Person>
    <Person>
        <Name>Jane</Name>
        <Lastname>Doe</Lastname>
        <Age>29</Age>
    </Person>
</People>

它被压缩为.zip个文件。我可以通过以下方式轻松阅读独立(非压缩)文件:

HTML

<input type="file" id="unzipTest">

的JavaScript

document.getElementById( 'unzipTest' ).addEventListener( 'change', unzipFile );

function unzipFile( event ) {
    var eTarget = event.target;
    var file = eTarget.files[ 0 ];

    var reader = new FileReader();
    reader.onload = function(){
      var result = reader.result;
      console.log( 'result: ', result );
    };
    reader.readAsText( file );
}

我正确地在result变量中获取XML文件内容。

当我尝试提取包含该XML的zip文件时,

问题。 我这样做:

function unzipFile( event ) {
    var eTarget = event.target;
    var file = eTarget.files[ 0 ];

    var zip = new JSZip();
    zip.loadAsync( file, { optimizedBinaryString: true } ).then( function( fileContent ) {
        var key = Object.keys( fileContent.files )[ 0 ];
        var data = fileContent.files[ key ];
        var compressedContent = data[ '_data' ].compressedContent;

        console.log( 'compressed content: ', compressedContent );

        var blob = new Blob( [ compressedContent ] );

        var reader = new FileReader();
        reader.onload = function(){
            var result = reader.result;
            console.log( 'result: ', result );
        };
        reader.readAsArrayBuffer( blob );
    });
}

compressedContent变量是某种带有位(?)的数组(uint8array)。我试图通过.readAsArrayBuffer(); reader方法读取此数组,并传递blob个对象。不幸的是,我得到的是一些奇怪的ArrayBuffer byteLength属性,这是一个数字。

我做错了什么以及如何正确阅读提取的XML文件?

我正在使用JSZip库:https://stuk.github.io/jszip/

此外 - 我需要它才能使用Internet Explorer 11

[解决] 该解决方案帮助了我:https://stackoverflow.com/a/39964957/4983840

0 个答案:

没有答案