ダウンロードするxmlファイルがあります。ご存知のように、私が以下のリンクを提供するとき
<a href="some.xml">Downlad XML</a>
XMLが新しいタブで開き、それが表示されます。ただし、方法があるかどうか知りたいのですが、これは.Zipファイルなどの他のファイルと同じようにダウンロードできます。
Content-Dispositionと呼ばれるHTTPヘッダーがあり、これは RFC1806 で次のように定義されています。
2.1インライン処理タイプ
メッセージの表示時に自動的に表示されるようにする場合は、ボディパーツに
inline
のマークを付ける必要があります。インラインボディパーツは、マルチパートメッセージの通常のセマンティクスに従って、発生する順序で表示する必要があります。2.2アタッチメント配置タイプ
ボディパーツは
attachment
と指定して、メールメッセージの本文から分離されていること、およびそれらの表示が自動ではなく、ユーザーのさらなるアクションに依存することを示すことができます。代わりに、MUAは、ビットマップ端末のユーザーに添付ファイルのアイコン表現を提示するか、文字端末では、ユーザーが表示または保存するために選択できる添付ファイルのリストを提示する場合があります。
ヘッダーメッセージをxmlファイルに配置するには、サーバー側へのアクセスが必要です。たとえば、phpの header 関数を使用すると、次のように記述できます。
header('Content-Disposition: attachment; filename="some.xml"');
サーバー側にアクセスできない場合は、グーグルで見つけた次のJavaScriptトリックを試すことができます(機能するかどうかはわかりません)。
<a href="javascript:void(0);" onclick="document.execCommand('SaveAs',true,'some.xml');">Save this page</a>
多くの解決策を試した後、これは私のために働いた。
以下に示すように、ファイルリンクにダミーの引数を指定してみてください。
<a href="http://link/to/the/file.xml?dummy=dummy" download>Download Now</a>
Webブラウザを右クリックして[名前を付けてページを保存...]を選択するだけで機能することがわかりました。
上記のMohdのソリューションと同様に、ここでW3で指定されているダウンロード属性を使用できました: http://www.w3schools.com/tags/att_a_download.asp 。このルートを使用する際の優れたトリックは、ダウンロードしたファイル名がサーバー上のファイル名と異なる場合に、そのファイル名を指定できることです。
<a href="http://link/to/the/file.xml" download="downloadedfilename.xml">XML Download Text</a>
次のようなものを使用します:
private function sendXml($xml, $label) {
ob_clean();
header('Content-type: text/plain; charset=UTF-8');
header('Content-Disposition: attachment; filename="' . $label . '.xml"');
echo ltrim($xml);
ob_flush();
exit;
}
これが私のVBAソリューションです。マクロはXMLファイルをダウンロードし、マクロファイルのフォルダーに保存し、プロセスが完了するとユーザーに通知します。
Sub SaveXMLFromWeb()
Dim XDoc As Object
Dim XMLpath As String, outPath As String
XMLpath = "http://example.com/examplefile.xml" 'change to your URL
outPath = ThisWorkbook.Path & "\yourFileName.xml" 'change output file name
Set XDoc = CreateObject("MSXML2.DOMDocument")
With XDoc
.async = False
.validateOnParse = False
.Load (XMLpath)
.Save (outPath)
End With
MsgBox ("XML file has been downloaded and saved in the following location:" & String(2, vbLf) & outPath)
End Sub