Преобразуйте xml в xml динамически с помощью Xslt - PullRequest
0 голосов
/ 13 марта 2019

Здесь я добавил свой код 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>

Я попробовал это, но не смог получить ожидаемый результат.

Ответы [ 2 ]

1 голос
/ 13 марта 2019
<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...
0 голосов
/ 13 марта 2019
<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>
...