2012-02-22 4 views
1

XML peut être transformé par un navigateur en utilisant XSL. Cela peut être fait par référence à un xsl dans le xml par ajoutant la ligne suivante dans le fichier xml:Convertir HTML créé par XML, XSL en MHTML

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

Ouverture ce fichier XML maintenant avec Internet Explorer affiche les données correctes dans le navigateur.

Le XML lui-même fait référence à de nombreux autres fichiers, par ex. les images qui se trouvent dans un dossier.

Je veux enregistrer les données affichées (avec toutes les données référencées) dans un seul fichier MHTML (* .mht)

Comment dois-je procéder? Et est-ce possible?

Remarque: Les fichiers sont tous locaux (pas sur un serveur) et le fichier XML initial est le résultat des données de test. Je veux juste que mon fichier XML soit affiché correctement comme précédemment démarré à partir d'un seul fichier sans accéder à d'autres données en dehors du fichier mhtml.

Modifier sur la réponse 1:

J'ai inclus mon xml dans un iFrame d'un HTML:

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

Ce que j'ai enregistré à l'aide d'IE dans un fichier * .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... 

Depuis que j'utilise des fichiers locaux à la place de "http://www.m.de/name.xml" "fichier: // C: \ Documen ts et paramètres \ STEFFAN \ Desktop \ Test \ SUPL_TCLog.xml "a été édité par IE.

Mais cette référence locale ne semble pas fonctionner pour mhtml, qui craint et donc, j'ai utilisé un substitut aléatoire (http://www.m.de/name.xml) pour cela. (Cela fonctionne bien pour les fichiers image). Le changer en conséquence en ouvrant le fichier mht va commencer un téléchargement du fichier xml. Mais ce n'est pas voulu. Je veux qu'il soit affiché.

Que manque-t-il?

Répondre

-1

J'ai essayé quelques tentatives, mais je n'ai pas réussi. Aussi la proposition de Francis Avila je ne pouvais pas résoudre avec succès.

Particulièrement le code référencé par javascript contenait aussi d'autres références. Je ne savais pas comment les résoudre et les mettre dans mhtml. Peut-être que l'utilisation d'Altova StyleVision serait une solution.

Depuis je n'ai plus essayé. Je ferme ce fil.

0

C'est possible, mais vous devrez construire vous-même certaines choses.

MHTML est essentiellement un message électronique en plusieurs parties. Son format est entièrement décrit par RFC-2557. Il peut être généré par des générateurs de messages électroniques et des sérialiseurs.

Cependant, je ne suis pas au courant de tout outil qui va générer MHTML par programmation. Soyez averti, aussi, qu'il n'y a pas un seul format d'archive web standard (il en existe au moins quatre), et que seuls IE, Opera et Chrome peuvent lire MHTML.

La chose la plus simple qui peut fonctionner est de script IE pour ouvrir votre page et l'enregistrer en tant que MHTML.

Si vous souhaitez générer MHTML sans IE, vous devez créer un archiveur MHTML.

Avec un archiveur, la chose la plus simple à faire est de:

  1. toutes les ressources externes possibles
  2. assurez-vous que toutes ces ressources sont toujours référencées par la même URL
  3. puis utilisez un correspondant content-location pour cette ressource.

De cette façon, vous n'avez pas besoin de réécrire href et src attributs ou analyser votre xsl ou html pour découvrir les ressources à inclure.

S'il y a trop de ressources externes possibles ou si vous ne pouvez pas utiliser les chemins de façon cohérente, vous devrez effectuer l'analyse syntaxique pour la découverte de ressources et/ou la réécriture d'url.

Dans tous les cas, vous pouvez soit enregistrer le fichier xml + xsl, soit générer le fichier HTML en premier et l'enregistrer.

+0

Merci pour votre réponse. Voici quelques questions à ce sujet: J'ai essayé d'ouvrir ma page avec Internet Explorer, mais enregistrer permettra d'économiser un xml. (mht n'est pas choosable). Par conséquent, j'ai essayé de l'incorporer dans un IFrame et de l'enregistrer, même sans succès. Le MHTML ne peut pas être ouvert dès que je supprime la ressource. (Voir le code ci-dessus) En ce qui concerne le référencement des ressources "avec le même URL", voulez-vous dire que chaque source devrait être référencée par une URL différente, n'est-ce pas? Comme je travaille avec des fichiers locaux, l'URL par fichier /// ne semble pas fonctionner. Est-ce comme ça? –

+0

Il semble que IE n'offre cette option que si le fichier ouvert est un fichier HTML, alors commencez par le transformer en HTML, puis ouvrez-le dans IE. "Même url" signifie par ex. pour le même fichier "a.png", ne faites pas référence à "a.png" et "./a.png" parce que "content-location" ne peut pas correspondre aux deux. –