<xsl:for-each> 元素是 XSLT 样式表中的一个重要元素,用于迭代处理源 XML 文档中的一组节点,允许在模板中对每个节点应用相同的转换规则。这是一种循环结构,用于处理节点集合。

基本结构:
<xsl:for-each select="XPath表达式">
  <!-- 转换规则 -->
</xsl:for-each>

  •  select 属性包含一个 XPath 表达式,该表达式确定了要迭代处理的节点集合。


示例:

考虑以下 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:for-each> 元素的 XSLT 样式表的例子:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

  <xsl:template match="books">
    <html>
      <body>
        <!-- 对每个book元素应用相同的转换规则 -->
        <xsl:for-each select="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:for-each>
      </body>
    </html>
  </xsl:template>

</xsl:stylesheet>

在这个例子中,<xsl:for-each select="book"> 迭代处理 <books> 元素下的所有 <book> 元素,并对每个 <book> 元素应用相同的转换规则。

使用模板的方式:

可以在 <xsl:for-each> 元素内部使用其他模板,以实现更模块化和可维护的样式表。
<xsl:for-each select="book">
  <xsl:apply-templates/>
</xsl:for-each>

这将对每个 <book> 元素应用相应的模板。

注意事项:

1. <xsl:for-each> 元素内的转换规则是针对迭代中的每个节点执行的。

2. 在某些情况下,XPath 表达式可能返回一个空集,此时 <xsl:for-each> 不会执行任何迭代。

3. <xsl:for-each> 可能会导致模板的选择冲突。在这种情况下,可以使用 <xsl:apply-templates> 指定要应用的模板。

总体而言,<xsl:for-each> 元素是 XSLT 中用于处理节点集合的关键元素,允许对每个节点应用相同的转换规则,以实现对 XML 文档的循环处理。


转载请注明出处:http://www.zyzy.cn/article/detail/12207/XML