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