Available categories: [/] [development. ~]
|
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的办法。鉴于时间有限,只能用笨办法了:就是字符串分析替换。邮件列表里面很多人都遇到了这个问题而且一筹莫展,真搞不懂这个设计是什么意思 做了半天苦力搞好了这个问题,新的,更BT的问题又来了。这样的一个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">
<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直接搞掉 最后,一个字总结今天的心得——郁闷成P了! 补充一下,前两天这个namespace错误又有出现。观察现象发现当主xsl和include进来的xsl的 xsl:stylesheet标签中的xmlns声明部分有不同时就会使得included xsl的顶级标记中出现xmlns的声明。例如主xsl(main.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">从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 |
? |
Available categories: [/] [development. ~]
html hits:?40