<xsl:for-each> یک حلقه است باعث می شود دستورات درون ان برای تگ هایی  که در الگو مشخص شده اند ، تکرار شوند  ببینید وقتی می گویم تگ های title , price , artist  هم خانواده یعنی چی ؟
فرض کنید دستورات زیر قسمتی از یک برنامه کامل xml باشد

<cd>
<title>1999 Grammy Nominees</title>
<artist>Many</artist>
<country>USA</country>
<company>Grammy</company>
<price>10.20</price>
<year>1999</year>
</cd>
<cd>
<title>For the good times</title>
<artist>Kenny Rogers</artist>
<country>UK</country>
<company>Mucik Master</company>
<price>8.70</price>
<year>1995</year>
</cd>

 در این جا ما دو مجموعه تگ cd داریم هر تگ cd می شود پدر برای تگ های دورن خود پس تگ های title , artist , price , year در هر تگ cd می شوند هم خانواده یا برادر و خواهر هر مجموعه هیچ ربطی به مجموعه دیگر ندارد
مثال

مثال فصلهای قبل را کامل می کنیم طوری که محتوای تمام تگ های title , artist را بدست اورده در سطر جدید و سلولهای جدید نمایش دهد به روش استفاده از این تگ حلقه ای در ایجاد سطر و ستون دقت کنید

<?xml version=”1.0″ encoding=”ISO-8859-1″?>
<xsl:stylesheet version=”1.0″
xmlns:xsl=”http://www.w3.org/1999/XSL/Transform”>

<xsl:template match=”/”>
<html>
<body>
<h2>My CD Collection</h2>
<table border=”1″>
<tr bgcolor=”#9acd32″>
<th>Title</th>
<th>Artist</th>
</tr>
<xsl:for-each select=”catalog/cd”>
<tr>
<td><xsl:value-of select=”title”/></td>
<td><xsl:value-of select=”artist”/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>

</xsl:stylesheet>

 هر دفعه حلقه for-each تکرار میشه خود بخود محتوای title , artist بعدی از سند xml خوانده میشه نگران نباشید . درسته هنوز در خروجی برنامه xsl ما خود برنامه دیده میشه این به این خاطر هست که ما هنوز در برنامه xml نگفتیم که محتوای تگ ها توسط کدام برنامه xsl بازیابی و نشان داده بشن فیلتر گذاری در خروجی دستور for-each
تگ for-each یک صفت دارد به نام select با این صفت می توان شرط انتخاب محتوای تگ هایی که در الگو مشخص کردیم را بیان کنیم

مثال

<xsl:for-each select=”catalog/cd[artist=’Bob Dylan’]”>
یعنی محتوای تگ های با نام artist که درون تگ های cd هستند و ان تگ های Cd نیز خود در ون تگ catalog هستند را به شرطی  نمایش دهد که محتوای تگ artist برابر Bob Dylan باشد

 انواع عملگرهای منطقی  عبارت اند از :

=

مساوی باشد با
!=
مساوی نباشد با

&lt;

کوچکتر از

&gt;

بزرگ تر از

برنامه کامل :

<?xml version=”1.0″ encoding=”ISO-8859-1″?>
<xsl:stylesheet version=”1.0″
xmlns:xsl=”http://www.w3.org/1999/XSL/Transform”>

<xsl:template match=”/”>
<html>
<body>
<h2>My CD Collection</h2>
<table border=”1″>
<tr bgcolor=”#9acd32″>
<th>Title</th>
<th>Artist</th>
</tr>
<xsl:for-each select=”catalog/cd[artist=’Bob Dylan’]”>
<tr>
<td><xsl:value-of select=”title”/></td>
<td><xsl:value-of select=”artist”/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>

</xsl:stylesheet>

 همانطور که خروجی را دیدید  برنامه خودش در خروجی قرار می گیرد زیاد نگران نشوید

برای حل این مشکل  قسمت گام سوم در فصل xslt transform را ببینید