2011-02-28 6 views
3

다음과 같은 요구 사항이 있습니다.javascript를 사용하여 XML 파일을 만들고 다운로드하는 방법은 무엇입니까?

웹 페이지에 링크가 있습니다. 사용자가 링크를 클릭하면 파일을 즉시 만들어야하며 다운로드 상자가 나타납니다. 어떻게 자바 스크립트를 사용하여 그것을 할 수 있습니까?

+2

파일이 이미 존재하면 그냥 cr 파일의 URL에 대한 링크를 작성하십시오. 그렇지 않은 경우에는 서버 측 코드를 사용해야합니다. –

+0

XML 문자열을 만드는 것이 쉬운 부분입니다. 브라우저에서 합성 된 것을 "다운로드 가능한"파일로 만드는 것은 어렵지는 않지만 모든 (합리적인) 브라우저에서 작동하도록 어렵습니다. – Pointy

답변

2

사용자가 신뢰하는 경우 파일 시스템에서 직접 XML 파일을 만들 수 있습니다. 모질라 파이어 폭스에 대한 예제 코드 : 모든 브라우저에서 지원해야하는 경우

function mozillaSaveFile(filePath,content) 
{ 
    if(window.Components) { 
     try { 
      netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); 
      var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile); 
      file.initWithPath(filePath); 
      if(!file.exists()) 
       file.create(0,0664); 
      var out = Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream); 
      out.init(file,0x20|0x02,00004,null); 
      out.write(content,content.length); 
      out.flush(); 
      out.close(); 
      return true; 
     } catch(ex) { 
      return false; 
     } 
    } 
    return null; 
} 

,이를 구현하는 방법을 알아보십시오 http://www.tiddlywiki.com

편집 : 변화 때문에 이것은 파이어 폭스 17 + 작동하지 않습니다 권한이 안전하지 않은 것으로 간주되어 제거되었습니다. 자세한 내용은 여기를 참조하십시오 시도 후 https://bugzilla.mozilla.org/show_bug.cgi?id=546848#c57

14

을 안드레아스 내가 뭔가를 추가 할 것입니다 말씀 : 그것으로 파일을 넣어, 당신은 이런 링크가

function createAndOpenFile(){ 
    var stupidExample = '<?xml version="1.0" encoding="utf-8"?><aTag>something</aTag>'; 
    document.open('data:Application/octet-stream,' + encodeURIComponent(stupidExample)); 
} 

, the new download atribute주의 :

스크립트 이름.

<a href="#" onclick="createAndOpenFile()" download="file.xml">Donwload</a> 

그것은 예와 같이 향상된

환영 :-)

+1

좋은 답변입니다. 명성이 있습니다. 또한 수용된 응답과 같이 비표준 JS를 기반으로하지도 않습니다. +1. – Michael

11

당신은 모양을 사용할 수 있습니다 (21) 적어도 크롬 27, 파이어 폭스에서 작동 http://html5-demos.appspot.com/static/a.download.html

당신은 할 수 있습니다

다음 코드의 javacript 함수

var xmltext = "<sometag><someothertag></someothertag></sometag>"; 
var pom = document.createElement('a'); 

var filename = "file.xml"; 
var pom = document.createElement('a'); 
var bb = new Blob([xmltext], {type: 'text/plain'}); 

pom.setAttribute('href', window.URL.createObjectURL(bb)); 
pom.setAttribute('download', filename); 

pom.dataset.downloadurl = ['text/plain', pom.download, pom.href].join(':'); 
pom.draggable = true; 
pom.classList.add('dragout'); 

pom.click(); 
+0

이것은 아주 좋습니다! 파일 이름과 파일 유형 (MIME 유형)을 설정할 수도 있습니다. – 7ochem

+0

그게 내가 고마워 한걸 찾고있어! ;) – chemic

+0

이 게시물에 대한 다른 모든 답변 중에서 가장 좋은 답변입니다. 감사! :) –

관련 문제