Как мне предложить пользователю сохранить текст (xml) в файл? - PullRequest
0 голосов
/ 18 января 2010

У меня есть некоторый код JavaScript, который преобразует XML с помощью XSLT. Теперь я хочу, чтобы пользователь мог сохранить этот новый XML-файл (либо запросив его, либо выбрасывая новый XML-файл в виде файла или чего-то такого, чтобы пользователь мог затем сохранить его. Кто-нибудь знает, как это сделать?

var xmldoc = new ActiveXObject("Microsoft.XMLDOM");
xmldoc.async = false;
xmldoc.loadXML(responseText); // responseText is xml returned from ajax call
//apply the xslt
var xsldoc = new ActiveXObject("Microsoft.XMLDOM");
xsldoc.async = false;
xsldoc.load("../xslt/ExtraWorkRequest.xslt");
var content = xmldoc.transformNode(xsldoc);

Как заставить пользователя сохранить XML (контент) в виде файла?

Ответы [ 4 ]

1 голос
/ 18 января 2010

Вы не можете сделать это со 100% клиентским JavaScript с настройками безопасности по умолчанию. Вам нужно будет реализовать некоторую логику на стороне сервера. В вашем случае вы также сможете выполнять преобразование XML на стороне сервера.

http://www.bigresource.com/Tracker/Track-javascripts-ijfTJlI9/

http://support.microsoft.com/kb/q260519/

1 голос
/ 18 января 2010

Вы можете создать данные: URI с типом носителя application/octet-stream.

function download (data, charset) {
  if (!charset) {
    charset = document.characterSet;
  }
  location.href = ["data:application/octet-stream;charset=",
                   charset, ",", encodeURIComponent(data)
                  ].join("");
}

Все браузеры, кроме IE, поддерживают данные: URI.Я думаю, что IE8 может поддерживать их, но только для изображений.Для IE обходным путем может быть отправка данных на сервер (включая document.characterSet), а затем загрузка страницы, которая имеет что-то вроде следующего заголовка:

Content-Type: application/xml; charset={document.characterSet}
Content-Disposition: attachment

Если вы хотите дать файлутоже имя, используйте Content-Disposition: attachment; filename=....

Кроме того, чтобы все это работало, вы должны сначала преобразовать XML в строку.

1 голос
/ 18 января 2010

По умолчанию вы не можете. Браузер не должен обращаться к вашим локальным дискам из соображений безопасности.

Но, если вы можете попросить пользователя изменить его настройки безопасности (и вам не следует спрашивать), вы можете использовать FileSystemObject или даже Microsoft.XMLDOM.Save метод.

0 голосов
/ 19 января 2010

Я делаю это с фрагментами кода на моем блоге (пользователь может нажать на кнопку «Сохранить», и фрагмент появится в их текстовом редакторе по умолчанию, где они могут настроить его и / или скопировать в их приложение).

Он работает, помещая все текстовые данные в скрытое поле, а затем отправляет их очень простому серверному обработчику HTTP. Обработчик просто захватывает значение скрытого поля и выплевывает его обратно в ответ с правильным заголовком размещения содержимого, давая пользователю приглашение открыть / сохранить загрузку.

Это единственный способ заставить его работать.

...