Xslt xlst转换到每个公司节点的显示部门

Xslt xlst转换到每个公司节点的显示部门,xslt,Xslt,我是XSLT的初学者,目前我正在尝试显示每个节点中的列表 下面是我的XML <employee_data> <employeedetails id="1"> <company id="1"> <companyname>AOL</companyname> <department>IT</department> </company> <emp

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

下面是我的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:for-each select="key('companyname',.)">
    <xsl:value-of select="../department" />
    <br />
</xsl:for-each>
您只需要考虑路径,如果在XML层次结构中不同级别的其他公司元素不包含在内。

还要注意,我匹配company而不是companyname只是为了避免使用。。父轴

试试这个XSLT

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="html" />

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

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

    <xsl:template match="company">
        <xsl:value-of select="department" />
        <br />
    </xsl:template>
</xsl:stylesheet>

非常感谢。这对我帮助很大。此外,如何确保我们不会重复同一个部门不止一次。提前感谢您可以在部门上创建第二个密钥,并以相同的方式在其上使用muenchian分组。如果同一个部门可以出现在不同的公司中,那么密钥可能需要包含公司名称,因此看起来应该是这样的。如果你想不出来,可以问一个全新的问题。谢谢蒂姆:有可能用这个问题本身来更新代码吗?我不确定我提出一个新问题是否有意义。不确定堆栈溢出准则。请帮忙。这个问题已经被回答和接受了,所以在这种情况下,提出一个全新的问题是完全可以的。事实上,将原来的问题改为增加一个以前没有提到的新要求可能被认为是不好的做法。你只需要确保你的新问题是完全独立的,并且包含所有信息。i、 e.显示输入XML、预期输出以及您尝试过的任何XSLT。谢谢
<xsl:key name="companyname" match="company" use="companyname"/>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="html" />

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

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

    <xsl:template match="company">
        <xsl:value-of select="department" />
        <br />
    </xsl:template>
</xsl:stylesheet>