Lösungen für Codierungsprobleme, die bei serverseitigem XSLT auftreten

Y2J
Freigeben: 2017-04-22 14:50:19
Original
1978 Leute haben es durchsucht

Als wir kürzlich die Optimierung von Wetter für Google Earth mit Apple Pi diskutierten, verwendeten wir XSLT, um XML-Daten zu konvertieren. Dann muss hier eine Konvertierungs-Engine verwendet werden. Der ungefähre Prozess besteht darin, sowohl die XML-Datei als auch die XSLT-Datei zu übertragen der Speicher. Die DOM-Engine konvertiert es in das gewünschte HTML (in diesem Fall möchte ich eine KML-Datei generieren). Dieser Konvertierungsprozess ist in clientseitige und serverseitige Konvertierung unterteilt, da der Browser des Benutzers XML vollständig unterstützen muss, dies jedoch derzeit nicht von allen Browsern des Benutzers (IE5, IE4 usw.) unterstützt wird -seitige Konvertierung durchgeführt wird.
XML-Dateiformat:

<?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>
Nach dem Login kopieren

XSLT-Dateiformat (Inhaltsteil weggelassen):

<?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>
Nach dem Login kopieren

Der Konvertierungscode, den ich zu verwenden begann, ist ASP+JavaScirpt :

//========Ausgabetyp und Stream-Kodierung========================== =
 

Response.ContentType = "application/vnd.google-earth.kml+xml"; 
      Response.CharSet = "UTF-8" ;
Nach dem Login kopieren

//=====Rufen Sie die Remote-XML-Datei ab und laden Sie sie======================== = ==

 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);
Nach dem Login kopieren

//======XSL-Datei laden======================== = =

var xsl = Server.CreateObject("Microsoft.XMLDOM"); 
      xsl.async = false; 
      xsl.load(Server.MapPath("gew.xsl"));
Nach dem Login kopieren

//======Dateikonvertierung==================
Antwort schreiben( oXD.transformNode(xsl));
Es liegt auf der Hand, dass es kein Kodierungsproblem geben sollte, da die Kodierung überall deklariert ist. Aber etwas ist schief gelaufen. Die Eröffnungsanweisung der ausgegebenen KML-Datei lautet immer

  <?xml version="1.0" encoding="UTF-16"?>
Nach dem Login kopieren

. Durch Tests wurde festgestellt, dass es bei den beiden Quelldateien XML und XSLT kein Problem gibt Engine im ASP-Code und später im RE: [xsl] Problem mit Chinesisch (Lösung) Dieser Artikel hat grob den Grund gefunden. Er besagt, dass die Engine transformNode eine Zeichenfolge generiert und auf der Win32-Plattform immer UTF-16 verwendet um Zeichenfolgen zu verarbeiten, und wenn wir diese Zeichenfolge dann zum Generieren einer KML-Datei verwenden, kann das Ergebnis nur UTF-16 sein.
Die Lösung besteht darin, die transformNodeToObject-Engine zu verwenden. Der Dateikonvertierungsteil wird durch oXD.transformNodeToObject(xsl, Response) ersetzt. Der Unterschied zwischen diesen beiden Methoden besteht darin, dass erstere eine Zeichenfolgenvariable generiert und letztere die konvertierten XML-Daten direkt im angegebenen Knoten speichert.

Das obige ist der detaillierte Inhalt vonLösungen für Codierungsprobleme, die bei serverseitigem XSLT auftreten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!