2012-02-22 2 views
1

XML-код может быть преобразован браузером с использованием XSL. Это может быть либо сделано, со ссылкой на XSL внутри XML с помощью , добавив следующую строку в файле XML:Преобразование HTML, созданного XML, XSL в MHTML

<?xml-stylesheet type='text/xsl' href='sample.xsl'?>

Открытие этого XML-файл теперь с интернет-проводник покажет правильные данные в браузере.

Сам XML ссылается на многие другие файлы, например. которые находятся в некоторой папке.

Я хочу, чтобы сохранить данные, отображаемые (со всеми ссылочных данных) в одном MHTML файл (* .mht)

Как поступить? И возможно ли это?

Примечание: файлы все локальные (а не на сервере), а начальный xml - результат тестовых данных. Я просто хочу, чтобы мой XML-файл отображался правильно, как и раньше, из одного файла без доступа к другим данным за пределами файла mhtml.

Редактировать на ответ 1:

Я включил мой XML в плавающем фрейме в качестве HTML:

<body><iframe src="name.xml" width = "100%" height="1000"> </iframe></body>

Это я сэкономил, используя IE в * .mht файла:

From: <Saved by Windows Internet Explorer 7> 
Subject: XML-Test 
Date: Wed, 22 Feb 2012 14:47:34 +0100 
MIME-Version: 1.0 
Content-Type: multipart/related; 
    boundary="----=_NextPart_000_0000_01CCF170.E99B1DF0" 
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.6157 

This is a multi-part message in MIME format. 

------=_NextPart_000_0000_01CCF170.E99B1DF0 
Content-Type: text/html; 
    charset="Windows-1252" 
Content-Transfer-Encoding: quoted-printable 
Content-Location: file://C:\Documents and Settings\STEFFAN\Desktop\Test\XML-Test.html 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> 
<HTML><HEAD><TITLE>XML-Test</TITLE> 
<META http-equiv=3DContent-Type content=3D"text/html; = 
charset=3Dwindows-1252"> 
<META content=3D"MSHTML 6.00.6000.17107" name=3DGENERATOR></HEAD> 
<BODY><IFRAME=20 
src=3D"http://www.m.de/name.xml"=20 
width=3D"100%" height=3D1000> 
</IFRAME></BODY></HTML> 

------=_NextPart_000_0000_01CCF170.E99B1DF0 
Content-Type: text/xml; 
    charset="unicode" 
Content-Transfer-Encoding: base64 
Content-Location: http://www.m.de/name.xml 

//48ACEARABPAEMAVABZAFAARQAgAEgAVABNAEwAIABQAFUAQgBMAEkAQwAgACIALQAvAC8AVwAz 
AEMALwAvAEQAVABEACAASABUAE0ATAAgADQALgAwACAAVAByAGEAbgBzAGkAdABpAG8AbgBhAGwA... 

Поскольку я использую локальные файлы изначально вместо «http://www.m.de/name.xml» «file: // C: \ Documen ts и Settings \ STEFFAN \ Desktop \ Test \ SUPL_TCLog.xml "был выведен IE.

Но эта локальная ссылка, похоже, не работает для mhtml, что отстойно, и поэтому я использовал случайную замену (http://www.m.de/name.xml) для нее. (это отлично работает для файлов изображений). Таким образом, изменение файла mht начнет загрузку xml-файла. Но это не нужно. Я хочу, чтобы он отображался.

Что не хватает?

ответ

-1

Я попытался несколько попыток, но не был успешным. Также предложение Френсиса Авила, которое я не мог решить успешно.

В частности, код, на который ссылается javascript, также содержит другие ссылки. Я не знал, как их разрешить и поместить в mhtml.

Возможно, использование Altova StyleVision станет решением.

Так как я больше не пытался. Я закрываю эту тему.

0

Это возможно, но вам придется самостоятельно строить вещи.

MHTML - по существу многопользовательское электронное сообщение. Его формат полностью описан RFC-2557. Он может генерироваться генераторами почтовых сообщений и сериализаторами.

Однако я не знаю ни одного инструмента, который будет программно создавать MHTML. Также предупреждайте, что нет единого стандартного формата веб-архива (их как минимум четыре), и только IE, Opera и Chrome могут читать MHTML.

Простейшая вещь, которая может работать, - это сценарий IE, чтобы открыть вашу страницу и сохранить ее как MHTML.

Если вы хотите сгенерировать MHTML без IE, вам необходимо создать архиватор MHTML.

С помощью архиватора, самое простое, что нужно сделать, это:

  1. включают все возможные внешние ресурсы
  2. убедитесь, что все эти ресурсы всегда ссылаются на тот же URL
  3. затем использовать соответствующие content-location для этого ресурса.

Таким образом, вам не нужно переписывать href и src атрибуты или разобрать ваш XSL или HTML, чтобы обнаружить, какие ресурсы включить.

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

В любом случае вы можете либо сохранить xml + xsl, либо сначала сгенерировать выход HTML, и сохранить его.

+0

Спасибо за ваш ответ. Вот несколько вопросов по этому вопросу: Я попытался открыть мою страницу с помощью Internet Explorer, но сохранение приведет к сохранению xml. (mht не выбирается). Поэтому я попытался внедрить его в IFrame и сохранить его, также безуспешно. MHTML не может быть открыт, как только я удалю ресурс. (см. код выше) Что касается ссылки ресурсов «с тем же адресом», вы имеете в виду, что на каждый источник должен ссылаться другой URL-адрес, правильно? Поскольку я работаю с локальными файлами url по файлу ///, похоже, не работает. Это так? –

+0

Похоже, что IE будет предлагать эту опцию только в том случае, если открытый файл является HTML-файлом, поэтому сначала нужно преобразовать в HTML, а затем открыть его в IE. «Тот же URL» означает, например, для того же файла «a.png», не ссылайтесь на «a.png» и «./a.png», потому что «контент-местоположение» не может совпадать с обоими. –

Смежные вопросы