【问题标题】:Convert HTML created by XML, XSL to a MHTML将由 XML、XSL 创建的 HTML 转换为 MHTML
【发布时间】:2012-02-22 14:40:59
【问题描述】:

XML 可以通过浏览器使用 XSL 进行转换。 这可以通过在 xml 中引用 xsl 来完成 在 xml 文件中添加以下行:

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

现在用 Internet Explorer 打开这个 xml 文件将在浏览器中显示正确的数据。

XML 本身引用了许多其他文件,例如图片位于某个文件夹中。

我想将显示的数据(连同所有引用的数据)保存在一个中 mhtml 文件 (*.mht)

我该如何进行?这可能吗?

注意:文件都是本地的(不在服务器上),初始 xml 是测试数据的结果。 我只是希望我的 XML 文件能够像以前一样从单个文件开始正确显示,而无需访问 mhtml 文件之外的其他数据。

根据答案 1 进行编辑:

我已将我的 xml 包含在 HTML 的 iFrame 中:

<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:\Documents and Settings\STEFFAN\Desktop\Test\SUPL_TCLog.xml”通过 IE。

但是这个本地引用似乎不适用于 mhtml,这很糟糕,因此,我使用了一个随机替代 (http://www.m.de/name.xml) 来代替它。 (这适用于图像文件)。相应地更改它打开 mht 文件将开始下载 xml 文件。但这不是想要的。我希望它显示出来。

缺少什么?

【问题讨论】:

    标签: xml xslt mhtml


    【解决方案1】:

    这是可能的,但您必须自己构建一些东西。

    MHTML 本质上是多部分电子邮件。其格式由RFC-2557 完整描述。它可以由电子邮件消息生成器和序列化器生成。

    但是我不知道有任何工具会以编程方式生成 MHTML。另外请注意,没有一种标准的网络存档格式(至少有四种),只有 IE、Opera 和 Chrome 可以读取 MHTML。

    最简单的方法是编写 IE 脚本以打开您的页面并将其保存为 MHTML。

    如果你想在没有 IE 的情况下生成 MHTML,那么你需要创建一个 MHTML 归档器。

    使用存档器,最简单的做法是:

    1. 包括所有可能的外部资源
    2. 确保所有这些资源始终由相同的 url 引用
    3. 然后为该资源使用匹配的content-location

    这样您无需重写hrefsrc 属性或解析您的xsl 或html 来发现要包含的资源。

    如果有太多可能的外部资源或者您不能一致地使用路径,您将需要进行解析以进行资源发现和/或 url 重写。

    在任何情况下,您都可以保存 xml+xsl,也可以先生成 HTML 输出并保存。

    【讨论】:

    • 感谢您的回答。这里有一些问题:我尝试使用 Internet Explorer 打开我的页面,但保存将导致保存 xml。 (mht 不可选择)。因此,我尝试将它嵌入到 IFrame 中并保存它,但也没有成功。删除资源后,无法立即打开 MHTML。 (参见上面的代码)关于“具有相同 url”的资源引用,您的意思是每个源都应该由不同的 url 引用,对吗?由于我按文件处理本地文件 url /// 似乎不起作用。是这样的吗?
    • 看起来 IE 只有在打开的文件是 HTML 文件时才会提供该选项,所以先转换为 HTML,然后在 IE 中打开。 “相同的网址”表示例如对于同一个文件“a.png”,不要通过“a.png”和“./a.png”引用,因为content-location不能同时匹配两者。
    【解决方案2】:

    我确实尝试了一些尝试,但没有成功。 弗朗西斯·阿维拉的提案我也无法成功解决。

    特别是 javascript 引用的代码还包含其他引用。我不知道如何解决这些并将它们放入mhtml中。

    也许使用 Altova StyleVision 会是一个解决方案。

    因为我不再尝试了。我关闭了这个帖子。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-13
      • 1970-01-01
      • 2020-05-04
      • 2014-07-30
      • 1970-01-01
      • 2012-02-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多