Как загрузить 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