Динамически преобразуйте xml в xml с помощью Xslt

#xml #xslt #xquery

#xml #xslt #xquery

Вопрос:

Сюда я добавил свой 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>
  

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

Комментарии:

1. Добро пожаловать в SO. Мы помогаем вам, но не делаем всю работу за вас. Пожалуйста, покажите свою попытку.

2. да, @Utkanos. Я не размещал пост, не попробовав. Я новичок, и к тому же я тоже учусь. Я пробовал еще раз, но у меня ничего не получилось, поэтому мне нужно знать результат. итак, y я разместил здесь.

3. Можете ли вы сказать, можете ли вы использовать XSLT 2.0 или выше? Спасибо!

4. Я использовал только XSLT 1.0. Я не знаю больше о XSLT 2.0. Сейчас только я учусь. Я попробовал приведенный ниже код, но он показывает ошибку Xpath.

5. Вам следует ознакомиться с техникой, называемой «Группировка по-мюнхенски» для XSLT 1.0. См jenitennison.com/xslt/grouping/muenchian.html

Ответ №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. Я пробовал ваш код, но он показывает ошибку.. ОШИБКА: ‘Неподдерживаемый элемент XSL’w3.org/1999/XSL/Transform:for-each-group »

2. Используете ли вы xslt 1.0

3. Теперь я изменил 2.0, но все еще не получил o / p.

Ответ №2:

 <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>
  

Комментарии:

1. Я пробовал ваш код, но он выдает ошибку.. ОШИБКА: ‘Неподдерживаемый элемент XSL’ w3.org/1999/XSL/Transform:for-each-group »

2. @NagabalajiVijayakumar какую версию использовать

3. @NagabalajiVijayakumar используйте версию 2.0

4. Я изменил версию 2.0. Несмотря на то, что она выдает ту же ошибку.. На самом деле я работаю в eclipse и использую tranformer.java для этого необходимо преобразовать файл xml и xsl. В файле xsl я написал код и изменил там версию 2.0.