xslt转换以显示每个公司节点的部门

时间:2015-03-24 08:22:27

标签: xslt

我是XSLT的初学者,目前我正在尝试显示< department>的列表在每个< company>中节点

下面是我的XML

<employee_data>
 <employeedetails id="1">
    <company id="1">
        <companyname>AOL</companyname>
        <department>IT</department>
    </company>
    <employeename>Patrick</employeename>
    <employeedesg>Software Engineer</employeedesg>
    <employeesalary>18000</employeesalary>
    <employeedoj>10/03/2015</employeedoj>
 </employeedetails>

 ..... similar sets......
 ..... similar sets......

<employeedetails id="10">
    <company id="1">
        <companyname>AOL</companyname>
        <department>HR</department>
    </company>
    <employeename>Patricia</employeename>
    <employeedesg>HR Assistant</employeedesg>
    <employeesalary>18000</employeesalary>
    <employeedoj>10/03/2015</employeedoj>
 </employeedetails>
</employee_data>

我已经编写了下面的XSLT来获取公司名称,但是我希望显示来自不同公司的所有部门。

XSLT:

<xsl:key name="companyname" match="/employee_data/employeedetails/company/companyname" use="."/>

  <xsl:for-each select="/employee_data/employeedetails/company/companyname[generate-id() = generate-id(key('companyname',.)[1])]">
        <tr>
          <td>
            <xsl:value-of select="../@id"/>
          </td>
          <td>
            <xsl:value-of select="."/>
          </td>
        </tr>
      </xsl:for-each>

1 个答案:

答案 0 :(得分:0)

如果您想获得department的{​​{1}}个节点,只需使用您在公司分组中使用的相同密钥

company

作为旁注,您实际上可以简化您的密钥。您实际上不需要指定<xsl:for-each select="key('companyname',.)"> <xsl:value-of select="../department" /> <br /> </xsl:for-each> 元素的完整路径,只需要名称

company

如果XML层次结构中的其他<xsl:key name="companyname" match="company" use="companyname"/> 元素存在您不想包含的元素,则只需要考虑使用路径。

另请注意,我只是为了避免使用company父轴而与company而非companyname匹配。

试试这个XSLT

..