如何使用XSLT获取表中的行值

时间:2011-04-13 18:49:03

标签: xslt

我需要帮助使用xslt使用另一个行值从表中检索行值。

我有一张表格如下:

Employee       Manager
ABC           PQR
ABC           LMN
DEF           XYZ
IJK           XYZ

员工可以属于多个部门,可以拥有多个经理。

并且表的xml是:

<List>
    <Mapping>
      <Employee>ABC</Employee>
      <Manager>PQR</Manager>
  </Mapping>
  <Mapping>
      <Employee>ABC</Employee>
      <Manager>LMN</Manager>
  </Mapping>
  <Mapping>
      <Employee>DEF</Employee>
      <Manager>XYZ</Manager>
  </Mapping>
  ...
</List>

我从一个函数中获取员工姓名。在XSLT中使用员工姓名作为输入,我应该如何使用XSLT找到员工的经理姓名。我唯一的输出值应该是管理员名称列表或单个值。传递“ABC”员工姓名应该给我“PQR”和“LMN”作为经理值。

由于 KSR81

2 个答案:

答案 0 :(得分:1)

<xsl:param name="empName" />

<xsl:template match="/">
    <xsl:for-each select="//Mapping[Employee = $empName]">
        <xsl:value-of select="Manager"/>
        <xsl:text> </xsl:text>
    </xsl:for-each>
</xsl:template>

这将输出给定员工的每个经理的名称,以空格分隔和终止。

为了更有效地执行此操作,您可能希望使用keys

<xsl:param name="empName" />

<xsl:key name="mappingByEmployee" match="Mapping" use="Employee" />

<xsl:template match="/">
    <xsl:for-each select="key('mappingByEmployee', $empName)">
        <xsl:value-of select="Manager"/>
        <xsl:text> </xsl:text>
    </xsl:for-each>
</xsl:template>

答案 1 :(得分:0)

   <xsl:for-each select="Mapping">
     <xsl:if test="Employee = "ABC"">
         <xsl:value-of select="manager"/>
     <xsl:if>
  </xsl:for-each>

点击此处查看more,并使用参数here