Heim >Backend-Entwicklung >XML/RSS-Tutorial >Lösungen für Codierungsprobleme, die bei serverseitigem XSLT auftreten

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

Y2J
Y2JOriginal
2017-04-22 14:50:192028Durchsuche

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>

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>

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" ;

//=====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);

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

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

//======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"?>

. 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!

Stellungnahme:
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