Solutions aux problèmes d'encodage qui surviennent lors du XSLT côté serveur

Y2J
Libérer: 2017-04-22 14:50:19
original
1978 Les gens l'ont consulté

Récemment, lors de la discussion de l'optimisation de Weather For Google Earth avec Apple Pi, nous avons utilisé XSLT pour convertir les données XML. Ensuite, un moteur de conversion doit être utilisé ici. Le processus approximatif consiste à transférer à la fois le fichier XML et le fichier XSLT. la mémoire. Le moteur DOM le convertit en HTML souhaité (dans ce cas, je souhaite générer un fichier KML). Ce processus de conversion est divisé en côté client et côté serveur. Étant donné que la conversion côté client nécessite que le navigateur de l'utilisateur prenne entièrement en charge XML, mais que tous les navigateurs des utilisateurs ne le prennent pas actuellement en charge (IE5, IE4, etc.), le serveur est donc utilisé. -la conversion côté est effectuée. Elle est relativement idéale.
Format de fichier XML :

<?xml version="1.0" encoding="UTF-8"?> 
<weather ver="2.0"> 
  <head>[...] 
  </head> 
  <loc id="CHXX0101">[...]   
  </loc>   
  <cc>[...]   
  </cc>   
  <dayf>   
    <lsup>10/28/06 11:16 AM Local Time</lsup>   
    <day d="0" t="Saturday" dt="Oct 28">[...]   
    </day>   
    <day d="1" t="Sunday" dt="Oct 29">[...]   
    </day>   
  </dayf>  
</weather>
Copier après la connexion

Format de fichier XSLT (partie du contenu omise) :

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 
    <xsl:template match="/">[...] 
</xsl:stylesheet>
Copier après la connexion

Le code de conversion que j'ai commencé à utiliser est ASP+JavaScirpt :

//========Type de sortie et encodage du flux========================== =
 

Response.ContentType = "application/vnd.google-earth.kml+xml"; 
      Response.CharSet = "UTF-8" ;
Copier après la connexion

//=====Récupérer et charger le fichier XML distant======================== = ==

 var oXHy = Server.CreateObject("MSXML2.XMLHTTP"); 
      var url  = http://www.dnxh.cn/ge/CHXX0101.xml;   
      oXHy.open("GET",url,false); 
      oXHy.send(); 
      var oXD = Server.CreateObject("MSXML2.DOMDocument"); 
      oXD.loadXML(oXHy.responseText);
Copier après la connexion

//======Charger le fichier XSL======================== = =

var xsl = Server.CreateObject("Microsoft.XMLDOM"); 
      xsl.async = false; 
      xsl.load(Server.MapPath("gew.xsl"));
Copier après la connexion

//======Conversion de fichier====================
Réponse Écrire ( oXD.transformNode(xsl));
Il va de soi qu'il ne devrait pas y avoir de problème d'encodage, car l'encodage est déclaré partout. Mais quelque chose s'est mal passé. L'instruction d'ouverture du fichier KML de sortie est toujours

  <?xml version="1.0" encoding="UTF-16"?>
Copier après la connexion

. Grâce aux tests, il a été constaté qu'il n'y avait aucun problème avec les deux fichiers sources XML et XSLT. Le problème réside dans la conversion. moteur dans le code ASP, et plus tard dans le RE : [xsl] Problème avec le chinois (Solution) Cet article a trouvé à peu près la raison. Il dit que le moteur transformNode génère une chaîne, et sur la plate-forme win32, il utilise toujours UTF-16. pour traiter les chaînes, puis si nous utilisons cette chaîne pour générer un fichier KML, le résultat ne peut être qu'UTF-16.
La solution est d'utiliser le moteur transformNodeToObject. La partie conversion de fichier est remplacée par oXD.transformNodeToObject(xsl, Response). La différence entre ces deux méthodes est que la première génère une variable de chaîne et la seconde enregistre directement les données XML converties sur le nœud spécifié.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!