템플릿을 반복해서 적용합니다. 즉, 집합에 있는 각 노드에 적용합니다.
<xsl:for-each
select = Expression
</xsl:for-each>
특성
- select
필수 특성으로, 반복할 노드 집합을 결정하기 위해 현재 컨텍스트에서 계산되는 식입니다.
요소 정보
발생 횟수 |
제한 없음 |
부모 요소 |
xsl:attribute, xsl:comment, xsl:copy, xsl:element, xsl:fallback, xsl:for-each, xsl:if, xsl:message, xsl:otherwise, xsl:param, xsl:processing-instruction, xsl:template, xsl:variable, xsl:when, xsl:with-param, 출력 요소 |
자식 요소 |
xsl:apply-imports, xsl:apply-templates, xsl:attribute, xsl:call-template, xsl:choose, xsl:comment, xsl:copy, xsl:copy-of, xsl:element, xsl:fallback, xsl:for-each, xsl:if, xsl:message, xsl:number, xsl:processing-instruction, xsl:sort, xsl:text, xsl:value-of, xsl:variable |
주의
<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>