在服务器端的XSLT过程中出现的编码问题解决方案

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

最近和苹果皮在讨论优化 Weather For Google Earth 的时候使用到了 XSLT 来转换 XML 数据的问题,那这里就必须用到转换引擎,大概过程就是把 XML 文件和 XSLT 文件都转载到内存里用DOM引擎进行转换到我们想要的 HTML(我这个实例里是要生成 KML 文件)。这个转换的过程又分客户端和服务器端的,因为客户端的转换需要用户的浏览器完整地支持 XML ,但不是全部的用户的浏览器现在都支持的(IE5、IE4等),所以进行服务端的转换是比较理想的。
XML文件形式:

  [...] 
[...] [...] 10/28/06 11:16 AM Local Time [...] [...]
Nach dem Login kopieren

XSLT文件形式(内容部分省略):

   [...] 
Nach dem Login kopieren

我开始进行的转换代码,用的是ASP+JavaScirpt :

//========输出类型和流编码==========================

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

//=====获得并载入远程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);
Nach dem Login kopieren

//======载入XSL文件=========================

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

//======文件的转换====================
Response.Write(oXD.transformNode(xsl));
按理说这样应该没有编码的问题了,因为该声明编码的地方都声明了。可是偏偏出了问题。输出的 KML 文件的开头声明里面总是

Nach dem Login kopieren

通过测试发现 XML 和 XSLT 两个源文件没有问题,那问题就在 ASP 代码里的转换引擎上,后来在RE: [xsl] Problem with Chinese (Solution)这篇文章上大概的找到了原因,这里面说引擎 transformNode 是生成了一个字符串,而在 win32 平台上总是以 UTF-16 来处理字符串的,然后我们再用这个字符串来生成 KML 文件,那结果就只能是 UTF-16 的了。
解决的办法就是用 transformNodeToObject 引擎。文件转换部分换成 oXD.transformNodeToObject( xsl , Response)。这两个方法的不同之处就是前一个是生成了一个字符串变量,后一个是直接把转换后的 XML 数据保存到指定的节点里了。

Das obige ist der detaillierte Inhalt von在服务器端的XSLT过程中出现的编码问题解决方案. 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
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!