首页 > 代码库 > 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区分的)。

clip_image001

5、对于没有定义处理模板的节点是如何处理的?

解答:默认是按照顺序显示其节点的文本信息。

6、如何定义不处理一个节点及其子孙节点?

解答: 使用<xsl:template match="XPath"/>即可,这样即使为其子孙节点定义了处理模板,也不会被调用。