d-o-e PI以及奇怪的namespace问题 [Permalink]
Fri Mar 25 19:16:40 CST 2005
在xslt中,经常有需要保留<>,不把它替换成<>的需求。比如今天就遇到了需要在xslt中利用xalan调用java static method,生成部分wml代码的情况。按规范上说,只需要用
<xsl:value-of disable-output-escaping="yes" select="string('<')"/>这样的方式,就可以达到目的。这种方法在MSXML中完全没有问题。可是,到了java中情况就完全不同了。上述代码得到的是这样的一个半成品:
<?javax.xml.transform.disable-output-escaping?>意思似乎是让你再找个什么玩意作二次转换。可是找了一圈也没有找到处理这个d-o-e PI的办法。鉴于时间有限,只能用笨办法了:就是字符串分析替换。邮件列表里面很多人都遇到了这个问题而且一筹莫展,真搞不懂这个设计是什么意思
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:funcs="xalan://com.yupstudio.app.downwap.common.util.XSLTFuncs"> <xsl:output method="wml" omit-xml-declaration="no" indent="no" doctype-public="-//WAPFORUM//DTD WML 1.3//EN" doctype-system="http://www.wapforum.org/DTD/wml13.dtd" /> ......实在搞不清楚为什么会有这样的输出:
<wml xmlns:funcs="xalan://com.yupstudio.app.downwap.common.util.XSLTFuncs">这个namespace说明的attr为什么会加入这里?要知道到生成这个结果的时候,xalan已经发挥完作用了啊!解决方式仍然是简单粗暴:用regexp直接搞掉
xsl:stylesheet
标签中的xmlns声明部分有不同时就会使得included xsl的顶级标记中出现xmlns的声明。<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:funcs="xalan://com.yupstudio.app.downwap.common.util.XSLTFuncs">从xsl(footer.xsl):
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:funcs="xalan://com.yupstudio.app.downwap.common.util.XSLTFuncs" xmlns:digest="xalan://com.yupstudio.app.downwap.common.util.DigestUtil">那么在footer xsl负责解析的wml底部的那个
P
标记就会成为:
<xmlns:digest="xalan://com.yupstudio.app.downwap.common.util.DigestUtil">修改主从的xmlns定义一致即可解决问题。 --08-01-18
Posted by: miles
Comments on this entry