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

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

更多相关文章

  1. 用Shell脚本生成XML文件实例详解
  2. 在asp下通过xml打包网站文件的方法
  3. My Batis 的XML 映射配置文件的实例详解
  4. dom4j解析xml文件代码示例
  5. 用Java解析XML文件的代码示例
  6. src下xml等资源文件无法读取的问题在IDEA中如何解决
  7. 分享一个xml字符串通过dom4j解析的方法
  8. 在IE下字符串与XML转换产生BUG的解决方案
  9. 调用API生成RSS资源文件的实例详解

随机推荐

  1. ntfs在android平台上的移植
  2. Android回调——Android模块化编程
  3. Android之SurfaceView学习
  4. android Progressbar使用
  5. Android MediaPlayer基本使用方式
  6. Android加载中动画
  7. android 中 浏览器调用本地app应用
  8. Android(安卓)Common Use
  9. Linear Layout
  10. 6