Как загрузить XML без браузера, открывающего его на другой вкладке

У меня есть xml файл для загрузки. Как вы все знаете, когда я даю ссылку ниже.

<a href="some.xml">Downlad XML</a>

XML откроется на новой вкладке, отображающей его. Однако я хотел бы знать, есть ли способ, который можно загрузить, как и другие файлы, такие как .zip файл

Ответы

Ответ 1

Здесь есть HTTP-заголовок Content-Disposition, который определяется в RFC1806 следующим образом:

2.1 Тип встроенного расположения

Часть тела должна быть отмечена inline, если она предназначена для отображается автоматически при отображении сообщения. Внутренние части тела должны быть представлены в порядке которые они происходят, с учетом нормальная семантика многостраничных сообщений.

2.2 Тип расположения вложения

Боковые части могут быть обозначены attachment, чтобы указать, что они отдельно от основной части и что их отображение не должно быть автоматическим, но в зависимости от некоторых дальнейших действий пользователя. Вместо этого MUA представить пользователю растровое изображение терминал с изобразительным представлением вложений, или, на символьные терминалы со списком приложения, с которых пользователь может выбрать для просмотра или хранения.

Чтобы разместить сообщение заголовка в файле xml, вам понадобится доступ к серверной стороне. Например, используя функцию php header, вы можете написать что-то вроде:

header('Content-Disposition: attachment; filename="some.xml"');

Если у вас нет доступа к серверной части, вы можете попробовать следующий трюк JavaScript, который я нашел в Google (не уверен, что он будет работать):

<a href="javascript:void(0);" onclick="document.execCommand('SaveAs',true,'some.xml');">Save this page</a> 

Ответ 2

Попробовав много решений, это сработало для меня.

Попробуйте указать фиктивный аргумент для ссылки на файл, как показано ниже.

<a href="http://link/to/the/file.xml?dummy=dummy" download>Download Now</a>

Ответ 3

Я обнаружил, что просто щелкнув правой кнопкой мыши по веб-браузеру и выбрав "Сохранить страницу как...", выполните эту работу.

Ответ 4

используйте что-то вроде:

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;
    }

Ответ 5

Подобно решению 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>

Ответ 6

Вот мое решение 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