2011-12-08 150 views
6

我無法讀出我嵌套for-each循環。出於某種原因,它不會在直接節點下循環。麻煩似乎與tages.My第一個循環發生後,我打開表,我循環整個表中的管理報告,並嵌套下面的第二個節點。這工作正常,但是當我去嵌套下面的其他節點時,我能夠拉取值,但不是特定於父節點。我的眼睛充滿了這次運動的血絲,有人可以幫忙。提前致謝。爲每個循環嵌套的XML XSL

XSL:

<tr bgcolor="9acd32"> 
    <table><th>Data Source Name:</th></table> 
    <table><th><xsl:value-of select="@Value"/> </th></table> 
    </tr> 
    <tr> 
    <xsl:for-each select="*[name()='PartInformation']"> 
     <table bgcolor="#99ff66"><th>Part Information:</th></table> 
     <table bgcolor="#99ff66"><th><xsl:value-of select="@Value"/></th></table>  
    <tr> 
    <xsl:for-each select="*/*[name()='InspPrgInformation']">  
     <table bgcolor="#33ccff"><th>Inspection Program ID:</th></table> 
     <table bgcolor="#33ccff"><th><xsl:value-of select="@Value"/></th></table> 
    <table bgcolor="#33ccff"><th><xsl:value-of select="@NoOfTracefields"/></th></table> 
    </xsl:for-each> 
    </tr> 
    </xsl:for-each> 
    </tr>   
<tr> 
    <xsl:for-each select="*/*/*[name()='AreaInformation']">  
     <table bgcolor="#FFFF99"><th>Area Information:</th></table> 
     <table bgcolor="#FFFF99"><th><xsl:value-of select="@Area"/></th></table> 
     <table bgcolor="#FFFF99"><th><xsl:value-ofselect="@AreaCount"/>   
    </th></table> 
    </xsl:for-each> 
    </tr> 

</xsl:for-each> 
</table> 
</center> 

XML:

<AdminReports xmlns="30/11/2011 09:25:58"> 

    <AdminReport ID="1"> 
    <DataSourceInformation DataSourceID="2" Value="DCS_AERO_KINSTON_DCS350"> 
     <PartInformation PartID="8" Value="WithAreaInfo"> 
     <InspPrgInformation InspPrgID="10" Value="DCS350_Sec15Drill_Pannel1WithInfo"  NoOfTracefields="1">   
      <AreaInformation Area="L3" AreaCount="59"/> 
      <AreaInformation Area="L4" AreaCount="45"/> 
      <AreaInformation Area="LT4" AreaCount="54"/> 
     </InspPrgInformation> 
     </PartInformation> 
     <PartInformation PartID="9" Value="NoAreaInfo"> 
     <InspPrgInformation InspPrgID="9" Value="DCS350_Sec15Trim_Pannel1" NoOfTracefields="0"/> 
     </PartInformation> 
    </DataSourceInformation> 
    </AdminReport> 

    <AdminReport ID="2"> 
    <DataSourceInformation DataSourceID="2" Value="DCS_AERO_KINSTON_DCS350"> 
     <PartInformation PartID="8" Value="NoAreaInfo"> 
     <InspPrgInformation InspPrgID="10" Value="WithInfo" NoOfTracefields="1">   

     </InspPrgInformation> 
     </PartInformation> 
     <PartInformation PartID="9" Value="AreaInfo"> 
     <InspPrgInformation InspPrgID="9" Value="DCS350_Sec15Trim_Pannel1" NoOfTracefields="0"> 
      <AreaInformation Area="L4" AreaCount="75"/> 
      <AreaInformation Area="LT4" AreaCount="4"/> 
     </InspPrgInformation> 
     </PartInformation> 
    </DataSourceInformation> 
    </AdminReport> 
</AdminReports> 

回答

7

你在做什麼是你想達到什麼錯誤

<xsl:for-each select="*[name()='PartInformation']"> 
    <table bgcolor="#99ff66"><th>Part Information:</th></table> 
    <table bgcolor="#99ff66"><th><xsl:value-of select="@Value"/></th></table>  
    <tr> 
    <xsl:for-each select="*/*[name()='InspPrgInformation']">  
     <table bgcolor="#33ccff"><th>Inspection Program ID:</th></table> 
     <table bgcolor="#33ccff"><th><xsl:value-of select="@Value"/></th></table> 
    <table bgcolor="#33ccff"><th><xsl:value-of select="@NoOfTracefields"/></th></table> 
    </xsl:for-each> 
    </tr> 
</xsl:for-each> 

在S每一秒都不會與第一次相關。同樣的,你的第三個每個。

不要current()會給你當前迭代的節點。

你可以重寫你的前兩作,每個這樣的:

<tr> 
      <xsl:for-each select="*[name()='PartInformation']"> 
       <tr> 
        <xsl:for-each select="current()/*/InspPrgInformation"> 
         <table bgcolor="#33ccff"> 
          <th>Inspection Program ID:</th> 
         </table> 
         <table bgcolor="#33ccff"> 
          <th> 
           <xsl:value-of select="@Value"/> 
          </th> 
         </table> 
         <table bgcolor="#33ccff"> 
          <th> 
           <xsl:value-of select="@NoOfTracefields"/> 
          </th> 
         </table> 
        </xsl:for-each> 
       </tr> 
      </xsl:for-each> 
     </tr> 

第三個可以與你的當前設計中使用。因爲current()是每個for-each的本地,所以你的第三個for-每個都不知道其他兩個。另外你的設計似乎是使用xslt作爲一種編程語言,這是不行的。

最後嘗試下次提供一些完整/可編譯的示例以及您的目標文檔。