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-each:for-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)