技巧用xslmessage调试样式表

上传人:公**** 文档编号:512951222 上传时间:2023-03-09 格式:DOC 页数:8 大小:55KB
返回 下载 相关 举报
技巧用xslmessage调试样式表_第1页
第1页 / 共8页
技巧用xslmessage调试样式表_第2页
第2页 / 共8页
技巧用xslmessage调试样式表_第3页
第3页 / 共8页
技巧用xslmessage调试样式表_第4页
第4页 / 共8页
技巧用xslmessage调试样式表_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《技巧用xslmessage调试样式表》由会员分享,可在线阅读,更多相关《技巧用xslmessage调试样式表(8页珍藏版)》请在金锄头文库上搜索。

1、技巧 : 用 xsl:message 调试样式表XSLT 中的回显打印级别 : 初级Elliotte Harold (elharometalab.unc.edu),副教授 , Polytechnic University这篇技巧讨论了使用 xsl:message 元素帮助理解和调试可扩展样式表语言转换( Extensible Stylesheet Language Transformation , XSLT)样式表的不同方法。回显打印是调试困难问题的最古老的方法之一。不管怎么说,这仍然是最简单、最快捷的方法。如果不能 确定为何函数没有按预期工作,用 printf() 或类似的工具在控制台上打印

2、几个变量就可以了解幕后发生 了什么。当然, 必须有能够输出调试结果的控制台。 XSLT 不一定具有 printf() 这样的东西。 不过 XSLT 有一个与 printf() 对应的元素: xsl:message 。 xsl:message 元素不改变 XSLT 样式表生成的结果树,仅仅输出一 些消息让程序员看到。一般输出到控制台,但也可能是对话框或者日志文件。无论输出到哪里,都是一种 非常好的调试辅助手段。xsl:message 元素是可选的。没有要求处理程序一定支持它。不过大部分处理程序都支持它,而且通常把 消息输出到控制台。是否激活了某个模板? 如果输出不同于预期结果,首先要检查是否确实

3、激活了模板。有很多原因可能造成模板被跳过,比如:? match 属性中的元素名打错了? 错误的名称空间,尤其是当试图把默认名称空间中的元素与样式表中没有前缀的名称匹配时? 模式不匹配这仅仅是部分可能的原因 。还可能有其他原因造成应该被激活的模板没有激活。 为了检查是否执行了模板, 可以在模板的开头加上 xsl:message 元素说明处理程序确实执行到了这里。比方说,假设要将 XHTML 文 档转化成没有标记的普通文本。可以将类似 清单 1 所示的消息添加到模板中:清单 1. 用于调试的匹配 HTML 的模板规则Matched root nodeMatched html element运行该样

4、式表的时候,如果看到 Matched root node 消息,就知道到了那里。如果没有看到 Matched html element 消息,就知道并没有执行到这里。这样就提供了确定问题所在的线索。很可能是xsl:apply-templates 的 select 属性或者 html template 的 match 属性错了(这个例子是后一种情况, 第二个模板应该与 html:html 匹配)。无论哪种情况,都会告诉您到哪里查找最可能出问题的地方。包含 xsl:if 或 xsl:choose 语句的模板有多个分支。 可以在每个分支中加上 xsl:message 元素来确定执 行了哪一个(如果有

5、的话)。比如,清单 2 显示了插入到 DocBook XSL 样式表中以确定为何转换无效的 代码: 清单 2. 增加了调试指令的 DocBook XSL 模板CAPTION! EXTENSIONS! fixed WIDTH ATTRIBUTE!NO WIDTH ATTRIBUTE!100%TBODY!NO TBODY! NO CAPTION!WIDTH ATTRIBUTE!NO WIDTH ATTRIBUTE! 100%!-TBODY!NO TBODY!v/xsl:otherwisev/xsl:chooseXSLT模板可能比较复杂。要注意您的消息。我曾经多次犯过这样的错误,在错误的地方放上了N

6、O TBODY!这样的消息声明。结果看到的消息完全是误导。调试困难的问题之前一定要安排好缩进和空白。通常,清 理缩进本身就能发现问题所在。检查节点和节点集有时候最好计算得到一个结果而不是原样输岀文字。这样可以减少偶然误导自己的可能性。所幸的是, xsl:message元素的内容实际上是完整的XSLT模板。这就意味着可以包含的不仅仅是简单的字符串消息。比如清单3可以输岀激活模板的上下文节点的完整的祖先树:清单3.列举上下文节点祖先的模板 /也可打印当前元素的所有属性,如清单4所示:清单4.列举上下文节点属性的模板=基本上能够生成调试样式表需要的任何信息。但是,如果模板没有因为您所认为的原因而激活,复杂的模 板可能失败。有时候最好从一个简单的、仅仅确定上下文节点的表达式开始:: 这个消息看起来似乎没有什么意义。无论如何总该知道匹配的是什么节点吧?但事实上并非这么显而易见。这类调试的目标之一是发现代码思维模

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 活动策划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号