Como obter um XML sem que o navegador o abra noutra página

Tenho um ficheiro xml a transferir. Como todos sabem quando eu dou o link abaixo

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

o XML irá abrir numa página nova que o mostre. No entanto, gostaria de saber se há uma maneira, isso pode baixar como outros arquivos, como a .ficheiro zip

Author: ROMANIA_engineer, 2010-10-05

6 answers

Existe um cabeçalho HTTP chamado Content-Disposition, que é definido em RFC1806 como se segue:

2. 1 Tipo De Disposição Em Linha

Uma parte do corpo deve ser marcada inline se se pretende ser apresentado automaticamente na visualização da mensagem. As partes do corpo Inline devem ser apresentadas por ordem que ocorrem, sujeitos à semântica normal de mensagens multipartidárias.

2.2 O Tipo De Disposição Do Anexo

As partes do corpo podem ser designadas attachment para indicar que são separado do corpo principal do mensagem de E-mail, e que a sua visualização não deve ser automática, mas subordinadas a outras medidas do utilizador. O MUA poderia em vez disso apresentar o utilizador de um mapa de bits terminal com uma representação icónica dos anexos, ou terminais de caracteres, com uma lista de anexos a partir dos quais o utilizador pode seleccionar para visualização ou armazenamento.

A fim de coloque a mensagem de cabeçalho no arquivo xml, você vai precisar do acesso ao lado do servidor. Por exemplo, usando a função PHP header , você poderia escrever algo como:

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

Se não tiver acesso ao lado do servidor, pode tentar o seguinte truque JavaScript que encontrei no Google (não sei se funcionaria):

<a href="javascript:void(0);" onclick="document.execCommand('SaveAs',true,'some.xml');">Save this page</a> 
 11
Author: Eugene Yokota, 2010-10-05 04:22:54
Depois de tentar muitas soluções, isto funcionou comigo.

Tente fornecer um argumento fictício para a ligação do ficheiro como mostrado abaixo.

<a href="http://link/to/the/file.xml?dummy=dummy" download>Download Now</a>
 11
Author: Mohd Abdul Mujib, 2015-05-19 19:37:15

Descobri isso ao carregar com o botão direito no navegador da web e seleccionar "gravar a página como..."faz o trabalho.

 3
Author: evox, 2015-07-31 20:33:19

Usa algo como:

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;
    }
 0
Author: Orod Semsarzadeh, 2010-10-05 06:24:48

Semelhante ao Mohd da solução acima, eu era capaz de usar a transferência de atributo, conforme especificado pela W3 aqui: http://www.w3schools.com/tags/att_a_download.asp. Um truque legal sobre ir esta rota é que você pode especificar que você deseja que o nome do arquivo a ser baixado, se for diferente do nome do arquivo no servidor.

<a href="http://link/to/the/file.xml" download="downloadedfilename.xml">XML Download Text</a>
 0
Author: mwopata, 2016-09-26 19:29:46
Aqui está a minha solução de VBA. A macro irá transferir o ficheiro XML, gravá-lo na pasta do ficheiro macro e informar o utilizador assim que o processo estiver concluído:
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
 0
Author: Ryszard Jędraszyk, 2017-05-12 18:42:29