在这里,我添加了我的xml代码。我需要将xml动态地转换。如果我有员工数,我想按部门安排员工。
这是我的输入文件,
<?xml version="1.0" encoding="UTF-8"?>
<EmployeeList>
<employee>
<eid>r-001</eid>
<ename>Dinesh R</ename>
<age>35</age>
<deptcode>d1</deptcode>
<deptname>Research</deptname>
<salary>20000</salary>
</employee>
<employee>
<eid>r-002</eid>
<ename>Madhu V</ename>
<age>40</age>
<deptcode>d1</deptcode>
<deptname>Research</deptname>
<salary>12000</salary>
</employee>
<employee>
<eid>s-001</eid>
<ename>Kanmani S</ename>
<age>35</age>
<deptcode>d2</deptcode>
<deptname>Sales</deptname>
<salary>30000</salary>
</employee>
<employee>
<eid>s-002</eid>
<ename>Sujitha R</ename>
<age>40</age>
<deptcode>d2</deptcode>
<deptname>Sales</deptname>
<salary>12000</salary>
</employee>
我需要将输出分组到同一部门。我的例外输出是
<deptname name="Research">
<employee>
<eid>r-001</eid>
<ename>Dinesh R</ename>
<age>35</age>
<deptcode>d1</deptcode>
<deptname>Research</deptname>
<salary>20000</salary>
</employee>
<employee>
<eid>r-002</eid>
<ename>Madhu V</ename>
<age>40</age>
<deptcode>d1</deptcode>
<deptname>Research</deptname>
<salary>12000</salary>
</employee>
</deptname>
<deptname name="Sales">
<employee>
<eid>s-001</eid>
<ename>Kanmani S</ename>
<age>35</age>
<deptcode>d2</deptcode>
<deptname>Sales</deptname>
<salary>30000</salary>
</employee>
<employee>
<eid>s-002</eid>
<ename>Sujitha R</ename>
<age>40</age>
<deptcode>d2</deptcode>
<deptname>Sales</deptname>
<salary>12000</salary>
</employee>
</deptname>
我已经尝试过了,但是无法获得预期的输出。
答案 0 :(得分:1)
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="EmployeeList">
<xsl:copy>
<xsl:for-each-group select="employee" group-by="deptname">
<deptname name="{current-grouping-key()}">
<xsl:for-each select="current-group()">
<xsl:copy-of select="."/>
</xsl:for-each>
</deptname>
</xsl:for-each-group>
</xsl:copy>
</xsl:template>
You may try this...
答案 1 :(得分:0)
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="EmployeeList">
<xsl:copy>
<xsl:for-each-group select="employee" group-by="child::deptname">
<xsl:element name="deptname">
<xsl:attribute name="name"><xsl:value-of select="current-grouping-key()"/></xsl:attribute>
<xsl:for-each select="current-group()">
<xsl:copy-of select="*"/>
</xsl:for-each>
</xsl:element>
</xsl:for-each-group>
</xsl:copy>
</xsl:template>