如何在xsl中的另一个for-each内部使用for-each

use*_*081 5 xml xslt

XML是

<XYZ>
    <manager>
      <mId>m1</mId>
      <mName>mName1</mName>
    <manager>
    <manager>
      <mId>m2</mId>
      <mName>mName2</mName>
    <manager>
    <department>
      <dName>d1</dName>
      <dManager>m1</dManager>
    <department>
    <department>
      <dName>d2</dName>
      <dManager>m1</dManager>
    <department>
    <department>
      <dName>d3</dName>
      <dManager>m2</dManager>
    <department>
</XYZ>          
Run Code Online (Sandbox Code Playgroud)

对于每个经理,输出他管理的所有部门名称,我的代码就像

<xsl:for-each select="XYZ/manager">
<xsl:variable name='mId'>
  <xsl:value-of select="mId"/>
</xsl:variable>
<p>
  manager <xsl:value-of select="mName"/> manages department 
  <xsl:for-each select="XYZ/department[dManager=$mId]">
    <xsl:value-of select="XYZ/department/dName"/>,  

  </xsl:for-each>
</p>
</xsl:for-each>
Run Code Online (Sandbox Code Playgroud)

并且在之后没有manages department任何输出,有人知道这是怎么回事吗?谢谢!

小智 5

您的内在有一个上下文问题for-eachfor-each指令更改了上下文,然后应用第二个for-each和/或调用的值时department/dName,您的上下文就不正确。

然后只需修复您的两个最后选择,如下所示:

<xsl:for-each select="XYZ/manager">
  <xsl:variable name='mId'>
     <xsl:value-of select="mId"/>
   </xsl:variable>
   <p>
     manager <xsl:value-of select="mName"/> manages department 
     <xsl:for-each select="/XYZ/department[dManager=$mId]">
       <xsl:value-of select="dName"/>,  
     </xsl:for-each>
   </p>
</xsl:for-each>
Run Code Online (Sandbox Code Playgroud)