У меня есть следующий фрагмент XML, который появляется во многих местах, но порядок появления элемента TYPE является случайным.Кроме того, нет гарантии, что будут доступны ВСЕ типы, например, в некоторых фрагментах могут отсутствовать Visio и / или Outlook, или отсутствуют какие-либо другие узлы:
<Applications>
<Type Name="Word">
<Type Name="Excel">
<Type Name="PowerPoint">
<Type Name="Visio">
<Type Name="Outlook">
</Applications>
Я хочу изменить порядок элементов типа так, чтобы существовал тип Excel, он всегда будет в верхней части списка, и так далее:
if EXCEL exists,
place TYPE Excel at the top.
if WORD exists,
place TYPE Word next,
.
.
.
Я пробовал с xsl: copy, парой xsl: if и затем применил определенные шаблоны, также xsl: whens,К сожалению, ни один из них не работал для меня.Я взглянул на другой пост о переупорядочении элементов узла xml, и это не похоже на то, что я хотел (он использовал xsl: call-templates, которого у меня нет).
У меня есть кое-что, чтоначалось, как показано ниже, и я думаю, что мне нужно добавить код манипуляции выше в нижней части этого:
XML Обновлено
<xsl:template match="Applications">
<xsl:element name="Applications">
<xsl:element name="Type">
<xsl:attribute name="Name">PowerPoint</xsl:attribute>
</xsl:element>
<xsl:element name="Type">
<xsl:attribute name="Name">Outlook</xsl:attribute>
</xsl:element>
<xsl:apply-templates>
<xsl:sort select="string-length(substring-before(';Excel;PowerPoint;Outlook;Word;Visio',@Name))"/>
</xsl:apply-templates>
</xsl:element>
</xsl:template>
Требуется:
<Applications>
<Type Name="Excel">
<Type Name="PowerPoint">
<Type Name="Outlook">
<Type Name="Word">
<Type Name="Visio">
</Applications>
Но получил:
<Applications>
<Type Name="PowerPoint">
<Type Name="Outlook">
<Type Name="Excel">
<Type Name="Word">
<Type Name="Visio">
</Applications>
Благодарю за помощь в получении этой вещи ... TIA.