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 数据保存到指定的节点里了。
以上就是在服务器端的XSLT历程当中涌现的编码题目处理方案的细致内容,更多请关注ki4网别的相干文章!