Я знаю, что это базовая c проблема, но я очень плохо знаком с XSL и не могу заставить его работать. У меня есть XML -файл с заданной структурой, и я хочу переставить XML в алфавитном порядке на основе одного узла, сохраняя структуру. Мне нужна эта таблица стилей XSLT для изменения порядка XML при импорте его в Adobe InDesign.
Мой файл:
<?xml version="1.0" encoding="UTF-8"?>
<Root>
<Employee>
<First_Name>Andrew</First_Name>
<Last_Name>Miller</Last_Name>
<Salary>100000</Salary>
<Performance>8</Performance>
</Employee>
<Employee>
<First_Name>Betsy</First_Name>
<Last_Name>Clarke</Last_Name>
<Salary>105000</Salary>
<Performance>10</Performance>
</Employee>
<Employee>
<First_Name>Donald</First_Name>
<Last_Name>Abernathey</Last_Name>
<Salary>95000</Salary>
<Performance>7</Performance>
</Employee>
</Root>
Я хочу изменить порядок документа так, как он отсортирован в алфавитном порядке на основе тега <Last_name>
. Мой желаемый вывод:
<?xml version="1.0" encoding="UTF-8"?>
<Root>
<Employee>
<First_Name>Donald</First_Name>
<Last_Name>Abernathey</Last_Name>
<Salary>95000</Salary>
<Performance>7</Performance>
</Employee>
<Employee>
<First_Name>Betsy</First_Name>
<Last_Name>Clarke</Last_Name>
<Salary>105000</Salary>
<Performance>10</Performance>
</Employee>
<Employee>
<First_Name>Andrew</First_Name>
<Last_Name>Miller</Last_Name>
<Salary>100000</Salary>
<Performance>8</Performance>
</Employee>
</Root>
Я нашел несколько решений для изменения порядка вывода, но он всегда относится к выводу HTML, а не XML.
Обновление: по запросу вот моя попытка решить проблему. Я застрял, потому что теперь все копии копируются в один тег <Employee>
.
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<Root>
<Employee>
<xsl:for-each select="Root/Employee">
<xsl:sort select="Last_Name"/>
<First_Name><xsl:value-of select="First_Name"/></First_Name>
<Last_Name><xsl:value-of select="Last_Name"/></Last_Name>
<Salary><xsl:value-of select="Salary"/></Salary>
<Performance><xsl:value-of select="Performance"/></Performance>
</xsl:for-each>
</Employee>
</Root>
</xsl:template>
</xsl:stylesheet>