#java #xml #xslt
#java #xml #xslt
Вопрос:
Здесь я добавил свой код employee.xml . Входные данные являются,
<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>s-001</eid>
<ename>Kanmani S</ename>
<age>35</age>
<deptcode>d2</deptcode>
<deptname>Sales</deptname>
<salary>30000</salary>
</employee>
<employee>
<eid>d-001</eid>
<ename>Kanchana M</ename>
<age>35</age>
<deptcode>d3</deptcode>
<deptname>Delivery</deptname>
<salary>20000</salary>
</employee>
</EmployeeList>
Я хочу динамически преобразовывать xml с помощью xslt.
Мой исключенный вывод,
<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>
</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>
</deptname>
Я пытался, но не смог получить свой исключенный вывод. Мне нужен был вывод, который должен добавляться динамически.
Комментарии:
1. Не могли бы вы, пожалуйста, отредактировать свой вопрос, чтобы показать XSLT, который вы пробовали? Кроме того, можете ли вы объяснить логику, которой вы пытаетесь достичь? Вы пытаетесь сгруппировать сотрудников по отделам, например (предполагая, что в каждом отделе может быть более одного сотрудника)? А также, почему «Kanchana M» не отображается в выходных данных? Спасибо!
2. Я также пытался использовать Xslt. процесс заключается в том, что название отдела извлекается динамически (например: если я введу идентификатор сотрудника в качестве входных данных, на выходе будут показаны сведения о сотруднике и имя отдела сотрудника вместе с in).
Ответ №1:
<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. Большое вам спасибо.. Не могли бы вы, пожалуйста, подсказать мне, как изучить XSLT ..? Предложите мне несколько хороших веб-сайтов, на которые вы ссылаетесь.
Ответ №2:
According your Question following Xsl2.0 code
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="EmployeeList">
<xsl:for-each select="employee">
<xsl:element name="deptname">
<xsl:attribute name="name"><xsl:value-of select="child::deptname"/></xsl:attribute>
<employee>
<xsl:copy-of select="*"/>
</employee>
</xsl:element>
</xsl:for-each>
</xsl:template>
Комментарии:
1. Спасибо за идею. Я пробовал, и это работает.
2. Я пробовал ваш код, но если я попытаюсь добавить больше сотрудников в тот же отдел, он снова откроет тег <deptname name = research> . Мне должно было понадобиться, чтобы, если я добавлю какого-либо сотрудника, он должен был добавляться внутри тега и снова его не открывать.