濮阳杆衣贸易有限公司

主頁 > 知識庫 > 在服務器端的XSLT過程中的編碼問題

在服務器端的XSLT過程中的編碼問題

熱門標簽:隨州外呼調研系統(tǒng) 400電話辦理包年 東營電銷 南寧網絡外呼系統(tǒng)運營商 如何修改多個百度地圖標注 r語言數(shù)據(jù)可視化地圖標注 微信地圖標注合并了 高德地圖地圖標注服務中心 本地電話機器人
最近和蘋果皮在討論優(yōu)化 Weather For Google Earth 的時候使用到了 XSLT 來轉換 XML 數(shù)據(jù)的問題,那這里就必須用到轉換引擎,大概過程就是把 XML 文件和 XSLT 文件都轉載到內存里用DOM引擎進行轉換到我們想要的 HTML(我這個實例里是要生成 KML 文件)。這個轉換的過程又分客戶端和服務器端的,因為客戶端的轉換需要用戶的瀏覽器完整地支持 XML ,但不是全部的用戶的瀏覽器現(xiàn)在都支持的(IE5、IE4等),所以進行服務端的轉換是比較理想的。
    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> 
    XSLT文件形式(內容部分省略):

?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> 

    我開始進行的轉換代碼,用的是ASP+JavaScirpt :

//========輸出類型和流編碼==========================
      Response.ContentType = "application/vnd.google-earth.kml+xml";
      Response.CharSet = "UTF-8" ;
//=====獲得并載入遠程XML文件==========================
      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文件=========================
      var xsl = Server.CreateObject("Microsoft.XMLDOM");
      xsl.async = false;
      xsl.load(Server.MapPath("gew.xsl"));
//======文件的轉換====================
      Response.Write(oXD.transformNode(xsl)); 
    按理說這樣應該沒有編碼的問題了,因為該聲明編碼的地方都聲明了??墒瞧隽藛栴}。輸出的 KML 文件的開頭聲明里面總是
  ?xml version="1.0" encoding="UTF-16"?>
  通過測試發(fā)現(xiàn) XML 和 XSLT 兩個源文件沒有問題,那問題就在 ASP 代碼里的轉換引擎上,后來在RE: [xsl] Problem with Chinese (Solution)這篇文章上大概的找到了原因,這里面說引擎 transformNode 是生成了一個字符串,而在 win32 平臺上總是以 UTF-16 來處理字符串的,然后我們再用這個字符串來生成 KML 文件,那結果就只能是 UTF-16 的了。
    解決的辦法就是用 transformNodeToObject 引擎。文件轉換部分換成 oXD.transformNodeToObject( xsl , Response)。這兩個方法的不同之處就是前一個是生成了一個字符串變量,后一個是直接把轉換后的 XML 數(shù)據(jù)保存到指定的節(jié)點里了。

標簽:德州 果洛 宿遷 西雙版納 益陽 拉薩 寧夏 黃石

巨人網絡通訊聲明:本文標題《在服務器端的XSLT過程中的編碼問題》,本文關鍵詞  在,服務器,端,的,XSLT,過程,;如發(fā)現(xiàn)本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《在服務器端的XSLT過程中的編碼問題》相關的同類信息!
  • 本頁收集關于在服務器端的XSLT過程中的編碼問題的相關信息資訊供網民參考!
  • 推薦文章
    通城县| 瑞昌市| 陆良县| 东阳市| 宁明县| 隆回县| 咸丰县| 桂东县| 博湖县| 仪陇县| 北海市| 黄骅市| 江西省| 内江市| 邯郸市| 大埔县| 邵武市| 全州县| 固始县| 内乡县| 额敏县| 天全县| 额尔古纳市| 太康县| 双桥区| 岳池县| 元江| 五峰| 留坝县| 普格县| 江永县| 邳州市| 麻江县| 南阳市| 临城县| 天柱县| 阿尔山市| 枣庄市| 温州市| 三江| 营山县|