<xsl:for-each> 元素
重复应用模板 — 即对节点集中的每个节点应用模板。
<xsl:for-each
select = Expression
</xsl:for-each>
特性
- 选择
必选。表达式 (XML) 在当前上下文中计算,确定要循环访问的节点集。
元素信息
注释
<xsl:for-each> 元素为循环访问建立上下文。此循环中的 XSLT 转换指令将应用于选定的节点。<xsl:for-each> 选择的每个源元素成为新的上下文,针对该上下文在 <xsl:for-each> 中进行任何模式匹配。
示例
该示例中的 XSLT 文件定义输出文档的结构。输出是包含 <BODY> 和 <TABLE> 元素的顶级 HTML 元素。该表包含每个用户的重复行。该 XSLT 文件还使用模板创建姓名、地址和电话源元素的 <TD> 元素。
XML 文件 (customers.xml)
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="foreach.xsl" ?>
<customers>
<customer>
<name>John Smith</name>
<address>123 Oak St.</address>
<state>WA</state>
<phone>(206) 123-4567</phone>
</customer>
<customer>
<name>Zack Zwyker</name>
<address>368 Elm St.</address>
<state>WA</state>
<phone>(206) 423-4537</phone>
</customer>
<customer>
<name>Albert Aikens</name>
<address>368 Elm St.</address>
<state>WA</state>
<phone>(206) 423-4537</phone>
</customer>
<customer>
<name>Albert Gandy</name>
<address>6984 4th St.</address>
<state>WA</state>
<phone>(206) 433-4547</phone>
</customer>
<customer>
<name>Peter Furst</name>
<address>456 Pine Av.</address>
<state>CA</state>
<phone>(209) 765-4321</phone>
</customer>
<customer>
<name>Dan Russell</name>
<address>9876 Main St.</address>
<state>PA</state>
<phone>(323) 321-7654</phone>
</customer>
</customers>
XSLT 文件 (foreach.xsl)
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:template match="/">
<HTML>
<BODY>
<TABLE>
<xsl:for-each select="customers/customer">
<xsl:sort select="state" order="descending"/>
<xsl:sort select="name"/>
<TR>
<TD><xsl:value-of select="name" /></TD>
<TD><xsl:value-of select="address" /></TD>
<TD><xsl:value-of select="phone" /></TD>
</TR>
</xsl:for-each>
</TABLE>
</BODY>
</HTML>
</xsl:template>
</xsl:stylesheet>
输出
以下是格式化输出:
以下是处理器输出:
<HTML>
<BODY>
<TABLE>
<TR>
<TD>Albert Aikens</TD>
<TD>368 Elm St.</TD>
<TD>(206) 423-4537</TD>
</TR>
<TR>
<TD>Albert Gandy</TD>
...
</TR>
</TABLE>
</BODY>
</HTML>