<xsl:apply-templates> 元素是 XSLT 样式表中的一个重要元素,用于在处理 XML 文档时将转换的控制权交给模板。它通常与模板匹配(match 属性)一起使用,根据匹配的规则选择性地应用模板,实现对 XML 文档的分层处理。

基本结构:
<xsl:apply-templates select="XPath表达式" mode="模式">
  <!-- 可选的参数和其他内容 -->
</xsl:apply-templates>

  •  select 属性:包含一个 XPath 表达式,用于选择要应用模板的节点集合。

  •  mode 属性:可选,指定应用的模式。如果省略,将使用默认模式。


示例:

考虑以下 XML 文档:
<books>
  <book>
    <title>Introduction to XSLT</title>
    <author>John Doe</author>
    <price>30</price>
  </book>
  <book>
    <title>Advanced XSLT Techniques</title>
    <author>Jane Smith</author>
    <price>60</price>
  </book>
</books>

下面是一个使用 <xsl:apply-templates> 元素的 XSLT 样式表的例子:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

  <xsl:template match="books">
    <html>
      <body>
        <!-- 应用book模板处理books元素下的所有book元素 -->
        <xsl:apply-templates select="book"/>
      </body>
    </html>
  </xsl:template>

  <xsl:template match="book">
    <div>
      <h2><xsl:value-of select="title"/></h2>
      <p>Author: <xsl:value-of select="author"/></p>
      <p>Price: $<xsl:value-of select="price"/></p>
    </div>
  </xsl:template>

</xsl:stylesheet>

在这个例子中,<xsl:apply-templates select="book"/> 用于在 <books> 元素下应用模板,处理所有 <book> 元素。

参数传递:

<xsl:apply-templates> 元素还可以传递参数给被调用的模板。参数以 <xsl:with-param> 元素的形式在 <xsl:apply-templates> 内指定。
<xsl:apply-templates select="book">
  <xsl:with-param name="discount" select="10"/>
</xsl:apply-templates>

在被调用的模板中,可以使用 <xsl:param> 元素接收参数值。
<xsl:template match="book">
  <xsl:param name="discount"/>
  <!-- 使用$discount进行处理 -->
</xsl:template>

模式匹配:

<xsl:apply-templates> 元素的 select 属性用于指定应用模板的节点,但通常模板匹配规则(match 属性)足以决定哪个模板会被应用。
<xsl:template match="book">
  <!-- 默认模板,处理book元素 -->
</xsl:template>

<xsl:template match="book[price > 50]">
  <!-- 匹配价格大于50的book元素的模板 -->
</xsl:template>

总体而言,<xsl:apply-templates> 元素是 XSLT 样式表中用于应用模板的关键元素,它允许在处理 XML 文档时有选择性地应用不同的转换规则。


转载请注明出处:http://www.pingtaimeng.com/article/detail/12211/XML