2012-04-30 8 views
2

は、Firefox 3.5.xのと3.6.xの上で動作するために使用次のJavaScriptブラウザの最近の変化によって窮地に立たされたが、それはもはやFirefoxの11.xのやSafari 5.1.xではでは行われませんJavascriptは私の専門ではないので、最近の変更をスピードアップするつもりはありません。DOMParserをとXSL

具体的には、[参照]ボタンは明らかにファイルを読み込んでいます(これは検証されていませんが、FCPからのXMLシーケンスの書き出しになります)が、[処理]ボタンを押すとXSLTの結果は以前のブラウザのバージョンと同じように '出力' DIV。

最近の変化であると考えられるので、http://johnpilgrim.net/color/jProcess.html

でテストのための適切なサンプルXMLファイルはhttp://johnpilgrim.net/color/sample.xml

のhtmlに変更何も、javascriptやXSLで利用できる文脈で見ることができますブラウザ。私はFirefoxで動作するように設計してテストしただけなので、他の何かでテストしたことはありません。

思考?ソリューション?

ありがとうございます! ジョン

<head> 

    <script type="text/javascript"> 

     function jProcess(){ 
      // Get the file contents locally, using the nifty Firefox 3 nsIDOMFile interface 
      var file_contents = document.getElementById('xml_file').files.item(0).getAsText("utf8"); 

      // Cast/Convert to an XML Document 
      var parser = new DOMParser(); 
      xmlDoc = parser.parseFromString(file_contents, "text/xml"); 

      // XSLT Transformation 
      var xslt = document.implementation.createDocument("", "", null); 
      xslt.async = false; 
      xslt.load("jProcess.xsl"); 
      var process = new XSLTProcessor(); 
      process.importStylesheet(xslt); 
      var result = process.transformToFragment(xmlDoc, document); 

      // Show the output 
      document.getElementById('output').innerHTML= " ";    
      document.getElementById('output').appendChild(result); 

      return false; 
     }; 
    </script> 
</head> 

<body> 
<form method="post" onsubmit="return jProcess();"> 
<fieldset> 
    <legend>Select the XML file for the FCP sequence you want to process into HTML.</legend> 
    <input type="file" size=100 name="xml_file" id="xml_file"> 
    <input type="submit" value="Convert"> 
</fieldset> 
</form> 
<div id="output"></div> 

+0

1のように見えます。 – Smandoli

答えて

3

私はWindows上のFirefox 12を使用してサンプルを試してみました、エラーコンソールがそうコードは、単に任意のより多くの原因の変化に機能しないエラー

Timestamp: 01.05.2012 11:23:43 
Error: document.getElementById("xml_file").files.item(0).getAsText is not a function 
Source File: http://johnpilgrim.net/color/jProcess.html 
Line: 40 

を示しinput type = "file"コントロールに公開されているAPIは、それぞれ、そのコントロールによって公開されているFileListに公開されているオブジェクトを表します(File)。 https://developer.mozilla.org/en/DOM/Fileに基づいて、getAsTextメソッドはGecko/FF 7で廃止され、後で削除される可能性があります。ファイルの内容を読むには、今はhttps://developer.mozilla.org/en/DOM/FileReader#readAsText%28%29を使うべきです。それはさらに非同期APIなので、あなたのコードを再構成する必要があります:http://home.arcor.de/martin.honnen/xml/test2012050101.html(このサンプルは現在のバージョンのFirefox、Opera、Chromeで動作します)。

だから、FileReaderの使用例は、OPで「窮地に立たさ」良い説明、クールな名前「ジョン・ピルグリム」と単語の使用を

function transform(file, sheetUrl) { 
    if (typeof FileReader !== 'undefined') { 
    var fileReader = new FileReader(); 
    fileReader.onload = function(evt) { 
     var doc = new DOMParser().parseFromString(this.result, 'application/xml'); 
     var proc = new XSLTProcessor(); 
     var req = new XMLHttpRequest(); 
     req.open('GET', sheetUrl, false); 
     req.send(null); 
     proc.importStylesheet(req.responseXML); 
     document.body.appendChild(proc.transformToFragment(doc, document)); 
    }; 
    fileReader.readAsText(file); 
    } 
    else { 
    console.log('No FileReader support.'); 
    } 
}