for-each in xslt 1.0

时间:2014-04-16 12:58:51

标签: xml

如何在xsl中为每个人做?我得到了每个元素,但我真的很感激dept示例。

2 个答案:

答案 0 :(得分:0)

您需要将<xsl:for-each select= "database/sims/sim[simID = $callsimID]">更改为<xsl:for-each select= "/database/sims/sim[simID = $callsimID]">,以确保从文档节点sim中选择/元素。

我会定义一个键<xsl:key name="sim" match="sims/sim" use="simID"/>并使用<xsl:for-each select="key('sim', $callsimID)">,这应该更有效。

答案 1 :(得分:0)

这非常简单,您根本不需要<xsl:for-each>。另外,你真的应该模块化你的样式表。

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
   <xsl:template match="/">
      <html>
         <head>
            <title>Customers</title>
         </head>
         <body>
            <xsl:apply-templates select="database" />
         </body>
      </html>
   </xsl:template>

   <xsl:template match="database">
     <table rules="all">
         <caption>Customers</caption>
         <xsl:apply-templates select="
            sims/sim[
               simID = current()/calls/call[
                  countryCodeOfOtherParty = '49' 
                  and areaCodeOfOtherParty = '31' 
                  and numberCodeOfOtherParty ='124567'
               ]/simID
            ]
         " />
      </table>
   </xsl:template>

   <xsl:template match="sim">
      <tr>
         <td><xsl:value-of select="customerID" /></td>
      </tr>
   </xsl:template>
</xsl:stylesheet>

,其中

sims/sim[
   simID = current()/calls/call[
      countryCodeOfOtherParty = '49' 
      and areaCodeOfOtherParty = '31' 
      and numberCodeOfOtherParty ='124567'
   ]/simID
]

毫不奇怪地意味着“每个可以调用该特定号码的SIM卡”。请注意使用current()函数在XPath中引用<database>

您可以使用<xsl:key>来提高效果,但最后只有在您的<database>非常大并且样式表变得迟钝时才有必要。