网站制作

本类阅读TOP10

·IIS 安装配置全攻略
·html基础学习笔记(2)
·html基础学习笔记(1)
·用VS.NET打开网上下载的.NET web项目出错的解决办法
·如何在网页上实现进度条
·限制TextArea区的文字输入数量
·HTML 4.0 语言快速参考
·在weblogic上配置SSL
·页面垂直居中的两种方法
·Zope/Plone内容管理系统的探讨与应用-内容管理系统(CMS)的概述

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
服务器端Xslt过程中出现的编码问题和解决方案

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

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

  Xslt文件编写学会以后,在真正的应用中,我还需要利用转换引擎,进行文件的转换。Xslt转换,一般来说分为服务器端转换和客户端转换。服务器端转换,也就是说用asp/jsp代码进行Xslt转换,这样发给用户客户端的是格式化好的Html文件(在Atom2Rss里面是Xml文件。)。客户端转换,是直接发给用户客户端Xml文件,由客户端进行转换,这样就需要客户端支持Xml标准。目前真正完整支持Xml标准的Ie6,Mozilla,而目前还有很多用户还在使用Ie5,甚至是Ie4,或者是其他的不支持Xml的浏览器。所以,在很多时候,我们需要进行服务器端的转换。

  程序代码很简单,下面代码来自Msdn,被我由Vb Script代码改成了Asp代码:


Dim xslt,xslDoc,xmlDoc,xslProc
Set xslt=Server.CreateObject("Msxml2.XSLTemplate")
Set xslDoc=Server.CreateObject("Msxml2.FreeThreadedDOMDocument")
Set xmlDoc=Server.CreateObject("Msxml2.DOMDocument")
Set xslProc=Server.CreateObject("IXSLProcessor")
xslDoc.async = False
xslDoc.resolveExternals = False
xslDoc.load "sample.xsl"
Set xslt.stylesheet = xslDoc
xmlDoc.async = False
xmlDoc.resolveExternals = False
xmlDoc.load "books.xml"
Set xslProc = xslt.createProcessor()
xslProc.input = xmlDoc
xslProc.addParameter "param1", "Hello"
xslProc.Transform
Response.write xslProc.output

  
  这个代码很简单也很容易看懂,但是在我真正应用的时候发现一个很痛苦的问题,就是我的Xml文件编码是GB2312,我的Xslt文件编码是GB2312,而且在Xslt里面也设定了输出的Xml文件的编码是GB2312,但是生成的文件的编码却是UTF-16。这样就造成了我的文件编码错误,在IE里面没有办法阅读。

  我在网上搜索这个问题,发现这个问题相当普遍,找到了一个讲得比较清楚的文章RE: [xsl] Problem with Chinese (Solution)
  
  文章的大概意思是:如果你需要生成指定编码的文档,你就不要在代码中使用String。因为在Win32平台里面String的编码总是Utf-16,所以你不能期望MSXML能够输出GB2312的String。如果利用流的方式Load,transformNodeToObject来进行处理,就可以避免这个问题。

  根据这个思路做出来的程序如下:


dim xsldoc,xmldoc,xmlfile,xslfile

xmlfile="test.xml"
xslfile="test.xsl"

'生成xml转换所需要的对象
set xslDoc = server.CreateObject("MSXML2.FreeThreadedDOMDocument")
set xmlDoc =server.CreateObject("MSXML2.DOMDocument")

'装入xsl文件
xsldoc.async=False
xsldoc.resolveExternals =False
xsldoc.load server.MapPath(xslfile)

'装入xml文件
xmldoc.async=False
xmldoc.resolveExternals =False
xmldoc.load server.MapPath(xmlfile)

xmldoc.transformNodeToObject xsldoc,Response
'进行转换

'清楚所有内存
set xslt=nothing
set xsldoc=nothing
set xmldoc=nothing
  
  
  至此,问题完全得到解决。



相关文章

相关软件




月光软件程序下载编程文档电脑教程网站设计网址导航网络文学游戏天地幽默笑话生活休闲写作范文安妮宝贝
电脑技术编程开发网络专区谈天说地情感世界游戏元素分类游戏热门游戏体育运动手机专区业余爱好影视沙龙
音乐天地数码广场教育园地科学大观古今纵横谈股论金人文艺术医学保健动漫图酷二手专区地方风情各行各业

月光软件站·版权所有