Miles' Blog

Welcome 2 My Planet

Available categories: [/] [development. ~]

d-o-e PI以及奇怪的namespace问题 [Permalink]

Fri Mar 25 19:16:40 CST 2005

在xslt中,经常有需要保留<>,不把它替换成&lt;&gt;的需求。比如今天就遇到了需要在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的办法。鉴于时间有限,只能用笨办法了:就是字符串分析替换。邮件列表里面很多人都遇到了这个问题而且一筹莫展,真搞不懂这个设计是什么意思 /images/emoticons/plain.gif

做了半天苦力搞好了这个问题,新的,更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直接搞掉tag的所有attr。

最后,一个字总结今天的心得——郁闷成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

Comments on this entry





Author (*):
Verify Code (*):8 9 7 9
E-mail:
URL:
Comment (*):
Remember me?

Available categories: [/] [development. ~]

Powered By blojsom   RSS Feed  RSS2 Feed  RDF Feed