不太现实,虽然可以使通过写通用模板来实现XML的解析,但页面输出就很难格式化了。即便你动态引用另一个xsl文件,你仍需要修改主XSL来实现,所以XML结构发生大的变化时,XSL也就得跟着变化。非要按你的要求给个思路也行:在XSL开始处定义一大堆和XML 标记有关的变量,加上其对应的模板名(也定义为变量),之后便可在XSL中判断XML标记,根据判断结果,调用不同模板,用于格式化相应的内容,以方便用户浏览。这只是一个简法,也许还有更好的方法。外部XSL的调用:<xsl:import> 元素
--------------------------------------------------------------------------------
定义和用法
<xsl:import>元素是一个高级(原文是top-level)的元素用来把一个样式表的内容导入到另外
一个。
说明:一个被导入的样式表比导入它的样式表的优先级要低。
说明:这个元素必须在<xsl:stylesheet> 或<xsl:transform>元素中作为第一个子节点出现。
说明:在Netscape 6 中不支持import 优先级规则,所以这个元素在Netscape 6 中与
<xsl:include>是一样的。
--------------------------------------------------------------------------------
语法
<xsl:import href="URI"/>

解决方案 »

  1.   

    我的情况是: 只有等xml文件生成之后才知道调用什么xsl文件,而且xsl文件是另外的人提供的,所以生成完xml文件之后才能再往xsl文件中写入 <xsl:import >之类的标签,这样的话很麻烦,且不容易控制。 需求要求我要把所有xml的内容在一个HTML文件中显示,以便用户打印出来,所以另外一种想法就是,之前写好的代码不变,后面添加的xml文件根据相对应的xsl文件生成HTML文件,然后再把这个HTML文件合并到之前的HTML文件中去。这又涉及到I/O流的操作,而且又要在以前生成的HTML文件中寻找到合适的插入位置。请问,还有不有更好的解决方案?
      

  2.   

    根据你的需求,一般是采用jackgogogo说的那样。
    实在不行就用动态生成XSL,也就是说在原有静态XSL文件上,通过程序进行适当修改,以便载入相应的XSL。
    麻烦归麻烦,但是没什么好的办法,毕竟这其实是源头的问题。本身什么格式的XML调用什么格式XSL,才是合理的做法,即表现与数据分离。XML数据仅仅是数据,不涉及表现方式。然而在XML数据含有控制XSL文件的信息,本身已经超出了XSL的能力范畴。采用这样的做法已经是不合适的,后面补救的动作当然也会麻烦很多。