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

标签 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>          

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

<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>

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

最佳答案

您的 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>

关于xml - 如何在 xsl 中的另一个 for-each 中使用 for-each,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27010649/

相关文章:

xml - Orbeon XForms 重复问题

xml - 打开不受信任的 visio 文档时如何强制 visio 重新计算公式

html - XSLT:转换为 HTML 时删除空格

xml - Xslt 到 xsl-fo 的转换

java - 无法在 android webview 中加载屏幕?

java - 在 Java 中将 http 响应转换为 XML 文档

java - 在序列化过程中更改一些对象字段名称

xml - xsl : transforming a list into a 2-D table

xml - XSLT/XPath 获取当前节点号

xslt - 列表中的元素测试