首页 > 代码库 > XSLT使用中的疑问
XSLT使用中的疑问
1、call-template的使用?如何传递参数、如何定义返回值?
解答:在call-template的地方使用xsl:withparam元素来定义所需要传递的参数,并在所调用的template处定义xsl:param定义形式参数。
2、如何转换输入文件的名称空间到输出文件?
使用 xsl:namespace-alias元素来完成。
3、apply-templates是如何去选择那个模板template的?是不是根据元素名称,而不是模板的名称?
如下:
<xsl:template match="message" name="message">
<h1><xsl:apply-templates select="title"/></h1>
</xsl:template>
<xsl:template match="title" name ="title">
<!-- xsl content -->
</xsl:template>
另外,如果没有对title的定义其处理模板,那默认的处理方式是什么?
解答:apply-templates是对当前父元素的所有子元素进行规则处理,所使用的规则就是某个子孙元素的处理模板。
如果没有定义处理模板,则默认行为为:无。
4、同一个xsl样式表文件中,XSLT处理器是如何查找那个来执行XML转换呢?
比如上面那个,对于title元素的处理,可以从message模板中进行处理(使用了apply-templates标签),但也可以使用模板title来处理?
解答:XSL处理转换引擎,是对源XML文档自上而下、由外往内的方式与各个template进行匹配,然后选择合适的处理模板进行转换源XML文档。也就是说对于源XML文件中处理过的节点,就不再被其他处理模板所处理了(除非多次调用,比如使用mode区分的)。
5、对于没有定义处理模板的节点是如何处理的?
解答:默认是按照顺序显示其节点的文本信息。
6、如何定义不处理一个节点及其子孙节点?
解答: 使用<xsl:template match="XPath"/>即可,这样即使为其子孙节点定义了处理模板,也不会被调用。