在Visual Studio中调试XSLT
相信大家对XML已经并不陌生了,它是一种计算机程序间交换原始数据的简单而标准的方法,HTML是一种特殊的XML,XSLT本身也是一种XML,只不过前者用来在浏览器中展示特定的文本信息,后者则被用来格式化XML中的数据,按照XSLT文档中指定的要求输出XML中的数据。可以毫不夸张地说,XSLT之于XML就好比CSS之于HTML。有关XSLT更加详细的介绍和使用,读者可以参考W3School中有关XSLT的部分。
在Visual Studio中开发和使用XSLT是非常方便的,这要归功于Microsoft的XML控件,我不太记得这个控件是在.NET的哪个版本中开始引入的,不过自从有了这个控件,我们在程序中加载和格式化XML输出就变得异常轻松。网上有很多介绍XML控件的文章和例子,使用起来大概是这个样子:
2
3 xmlContent.TransformArgumentList = new System.Xml.Xsl.XsltArgumentList();
4 xmlContent.TransformArgumentList.AddParam("Quarter", string.Empty, currentQuarter.Number);
5 xmlContent.TransformArgumentList.AddParam("Year", string.Empty, currentQuarter.Year);
6 xmlContent.TransformArgumentList.AddParam("StatementType", string.Empty, FinancialTable.ToString());
在XML控件中可以直接通过DocumentSource属性指定要加载的XML文件,XSLT文件也可以在前台代码中通过TransformSource属性来指定,上例中的后台代码主要是为了给XSLT文件传递三个参数,以便在解析XML文件时可以根据这三个参数的值做一些判断运算。
在一般的应用中,当XML文件的结构简单时,我们几乎可以自己编写脚本来完成所有的格式化工作,这毫不费力!而且即使使用XSLT来解析,遇到问题也可以非常直观地去修改。但是如果要解析的XML文件非常庞大和复杂,例如在XBRL (eXtensible Business Reporting Language, 通用业务报告语言) 中,我们通常都需要使用XSLT来解析XBRL实体文件,进而生成许多复杂的企业财务报表。这个时候如果遇到错误,直观地去观察代码很难发现错误。既然XSLT中可以编写代码逻辑并支持简单的逻辑运算,那么它可不可以调试呢?就像我们调试C#代码一样!
网上有很多专门用于调试XSLT代码的工具,不过都不是很理想。事实上,Visual Studio就提供了很好的XSLT调试器,而且是集成在开发环境中的,我们可以非常容易地使用它来进行XSLT的调试。
XSLT是用来解析XML的,所在,调试的时候只需要有这两个文件就足够了,并不需要实际的运行环境或者页面。有两种方法可以启动XSLT调试,除了上面给出的两个菜单位置外,你可以在XML文件中设置断点,或者在XSLT文件中设置断点,个人比较倾向于后者,因为解析过程中的关键算法都写在XSLT文件中,直接设置断点在调试时实时跟踪各个变量的值是最直观地。
点击Debug XSLT,如果你是通过XML文件进行调试的,Visual Studio会弹出选择XSLT文件的对话框;如果你是通过XSLT文件进行调试的,Visual Studio会弹出选择XML文件的对话框。选择文件后XSLT便开始尝试去解析对应的XML文件,如果遇到断点则停下来,这时你可以像调试C#代码一样调试XSLT。
如果你在编写复杂XSLT文件时经常遇到问题,不妨可以使用Visual Studio提供的这个调试工具进行XSLT的调试,相信你也可以编写出功能非常强大的XSLT文件,从而将XML文件解析出各种不同的样式。