在服务器端的XSLT过程中的编码问题

2023-12-07 0 602

最近和苹果皮在讨论优化WeatherForGoogleEarth的时候使用到了XSLT来转换XML数据的问题,那这里就必须用到转换引擎,大概过程就是把XML文件和XSLT文件都转载到内存里用DOM引擎进行转换到我们想要的HTML(我这个实例里是要生成KML文件)。这个转换的过程又分客户端和服务器端的,因为客户端的转换需要用户的浏览器完整地支持XML,但不是全部的用户的浏览器现在都支持的(IE5、IE4等),所以进行服务端的转换是比较理想的。 XML文件形式: <?xmlversion=\”1.0\”encoding=\”UTF-8\”?> <weatherver=\”2.0\”> <head>[…] </head> <locid=\”CHXX0101\”>[…] </loc> <cc>[…] </cc> <dayf> <lsup>10/28/0611:16AMLocalTime</lsup> <dayd=\”0\”t=\”Saturday\”dt=\”Oct28\”>[…] </day> <dayd=\”1\”t=\”Sunday\”dt=\”Oct29\”>[…] </day> </dayf> </weather> XSLT文件形式(内容部分省略): <?xmlversion=\”1.0\”encoding=\”UTF-8\”?> <xsl:stylesheetversion=\”1.0\”xmlns:xsl=\”http://www.w3.org/1999/XSL/Transform\”> <xsl:outputmethod=\”xml\”version=\”1.0\”encoding=\”UTF-8\”indent=\”yes\”/> <xsl:templatematch=\”/\”>[…] </xsl:stylesheet> 我开始进行的转换代码,用的是ASP+JavaScirpt: //========输出类型和流编码========================== Response.ContentType=\”application/vnd.google-earth.kml+xml\”; Response.CharSet=\”UTF-8\”; //=====获得并载入远程XML文件========================== varoXHy=Server.CreateObject(\”MSXML2.XMLHTTP\”); varurl=http://www.dnxh.cn/ge/CHXX0101.xml; oXHy.open(\”GET\”,url,false); oXHy.send(); varoXD=Server.CreateObject(\”MSXML2.DOMDocument\”); oXD.loadXML(oXHy.responseText); //======载入XSL文件========================= varxsl=Server.CreateObject(\”Microsoft.XMLDOM\”); xsl.async=false; xsl.load(Server.MapPath(\”gew.xsl\”)); //======文件的转换==================== Response.Write(oXD.transformNode(xsl)); 按理说这样应该没有编码的问题了,因为该声明编码的地方都声明了。可是偏偏出了问题。输出的KML文件的开头声明里面总是 <?xmlversion=\”1.0\”encoding=\”UTF-16\”?> 通过测试发现XML和XSLT两个源文件没有问题,那问题就在ASP代码里的转换引擎上,后来在RE:[xsl]ProblemwithChinese(Solution)这篇文章上大概的找到了原因,这里面说引擎transformNode是生成了一个字符串,而在win32平台上总是以UTF-16来处理字符串的,然后我们再用这个字符串来生成KML文件,那结果就只能是UTF-16的了。 解决的办法就是用transformNodeToObject引擎。文件转换部分换成oXD.transformNodeToObject(xsl,Response)。这两个方法的不同之处就是前一个是生成了一个字符串变量,后一个是直接把转换后的XML数据保存到指定的节点里了。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悠久资源 XML/RSS 在服务器端的XSLT过程中的编码问题 https://www.u-9.cn/biancheng/xmlrss/126065.html

常见问题

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务