select in xsl:call template的含义

时间:2014-02-17 16:09:11

标签: xml xslt

这个问题可能听起来很基本,但我对xsl中'SELECT'的目的究竟是什么感到困惑:调用模板

喜欢这里我有一个片段

<xsl:call-template name="tokenize">
          <xsl:with-param name="string" select="//text()" />

那么select在以下代码段中做了什么

由于

1 个答案:

答案 0 :(得分:0)

这是一个可能对您有所帮助的示例。输入XML:

<root>
<text>text1</text>
<text>text2</text>
<text>text3</text>
</root>

和XSLT:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="yes"/>
<xsl:strip-space elements="*"/>

<xsl:template match="/">
    <root>
        <xsl:call-template name="tokenize">
            <xsl:with-param name="string" select="//text()"/>
        </xsl:call-template>
    </root>
</xsl:template>

<xsl:template name="tokenize">
    <xsl:param name="string"/>
    <xsl:for-each select="$string">
        <xsl:element name="text{position()}">
            <xsl:value-of select="."/>
        </xsl:element>
    </xsl:for-each>
</xsl:template>
</xsl:stylesheet>

你得到的输出是:

<?xml version="1.0" encoding="utf-8"?>
<root>
   <text1>text1</text1>
   <text2>text2</text2>
   <text3>text3</text3>
</root>

在匹配“/”的模板中,您正在调用另一个模板“tokenize”。 select语句“// text()”选择整个文档中的所有text()节点,这些节点作为参数“string”传递给“tokenize”模板。 模板“tokenize”接收所有这些文本节点,每个节点都循环,并使用text()节点的值创建一个元素。