这两天一直在搞XML+Xslt输出的标准化,即输出Xhtml标准的代码
在.Net2.0的XslCompiledTransform 里 名字空间 xmlns="http://www.w3.org/1999/xhtml" 是正确输出xhtml标准的关键
如果没有这个命名空间的话,输出的文档标签会自动去掉结尾的 / 符号即<meta xxx /> 变成了<meta xxx>
有两种角决的办法:
一,自定义一个XHtmlWrite类,重写一下WriteEndElement() 方法,自已判断那些情况要关闭;
二,就是在模板文件Xlst里加上上面的合字空间啦~ .
对于第一种方法,结果就是xslt模板里的所有<xsl:output 里的方法都失去作用,并且输出的格式看起来和W3上的看起来就是不一样.
对于第二种方法就是输出的结果会自动合并空内容的标签,即<div></div>变成了<div /> 这个结果很是让人难受. 目前的解决办法是要么加<xsl:text> </xsl:text> 要么是在不想关闭的标签尾加上 xml:space="preserve"> 并且把结束标签换行.
我不知微软是乍想的,从XslTransform改到XslCompiledTransform 结果就出来这么一个事.哎~
如果有哪位大侠有更好的解决办法,万望提醒一下 .