Я новичок с XSLT, поэтому, пожалуйста, извините за мое незнание ... Я пытаюсь отсортировать простой XML-файл по значению атрибута и имени тега, но я пытаюсь получить доступ к значению атрибута.Вот полный пример:
<a>
<b attribute="e"></b>
<b attribute="b"></b>
<d attribute="a"></d>
<c></c>
</a>
И ожидаемый результат:
<a>
<b attribute="b"></b>
<b attribute="e"></b>
<c></c>
<d attribute="a"></d>
</a>
Вот моя попытка решить эту проблему:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes" />
<xsl:strip-space elements="*" />
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="@*">
<xsl:sort select="."/>
</xsl:apply-templates>
<xsl:apply-templates select="node()">
<xsl:sort select="name()"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
И это, очевидно,вообще не работает ...
В приведенном выше примере я хочу отсортировать тег b по значению их атрибута, но, как вы можете видеть, тег d не сортируется по значению атрибута, потому что это другое имя тега ...
Интересно, возможно ли это с помощью XSLT ... У вас есть идея?
Заранее спасибо.
ОБНОВЛЕНИЕ ----------------------
Я попробовал andyb решение, которое, кажется, работает нормальнои выглядит довольно просто, но у меня есть еще одна проблема с этим решением.
Допустим, у меня есть этот XML:
<a>
<b attribute="e" optionalAttr="fg"></b>
<b attribute="b"></b>
<d attribute="a"></d>
<c></c>
</a>
Я добавил необязательный параметр для b тег.При применении решения andyb необязательный параметр будет игнорироваться, поскольку он не соответствует шаблону.Вот результат:
<a>
<b attribute="b"></b>
<b attribute="e"></b>
<c></c>
<d attribute="a"></d>
</a>
Вместо следующего я ожидаю:
<a>
<b attribute="b"></b>
<b attribute="e" optionalAttr="fg"></b>
<c></c>
<d attribute="a"></d>
</a>
У вас есть идеи?Заранее спасибо.