Здравствуйте.
Вот упрощенный вариант имеющихся XML
Из него надо получить следующее:
гуглом и различными экспериментами удалось добиться частичной реализации
Проблема в том. что данная XSLT сортирует и то, что сортировать не надо.
однако добиться исключения ветки <DO_NOT_SORT_PROPS> из правил у меня не получается
Надеюсь на форумчан.
С уваженим, Константин.
Вот упрощенный вариант имеющихся XML
Код:
<?xml version="1.0" encoding="WINDOWS-1251"?>
<TEST xmlns="http://xmlns.oracle.com/ku" version="1.0">
<OBJECT name="B_Object">
<PROPERTIES>
<PROPERTY>
<NAME>B_PROPERTY</NAME>
</PROPERTY>
<PROPERTY>
<NAME>C_PROPERTY</NAME>
</PROPERTY>
<PROPERTY>
<NAME>A_PROPERTY</NAME>
</PROPERTY>
</PROPERTIES>
<DO_NOT_SORT_PROPS>
<PROPERTY>
<NAME>B_PROPERTY</NAME>
</PROPERTY>
<PROPERTY>
<NAME>C_PROPERTY</NAME>
</PROPERTY>
<PROPERTY>
<NAME>A_PROPERTY</NAME>
</PROPERTY>
</DO_NOT_SORT_PROPS>
<SOME_OTHER_NODES/>
</OBJECT>
<OBJECT name="C_Object">
<SOME_OTHER_NODES/>
</OBJECT>
<OBJECT name="A_Object">
<SOME_OTHER_NODES/>
</OBJECT>
</TEST>
Код:
<TEST version="1.0" xmlns="http://xmlns.oracle.com/ku">
<OBJECT name="A_Object">
<SOME_OTHER_NODES/>
</OBJECT>
<OBJECT name="B_Object">
<PROPERTIES>
<PROPERTY>
<NAME>A_PROPERTY</NAME>
</PROPERTY>
<PROPERTY>
<NAME>B_PROPERTY</NAME>
</PROPERTY>
<PROPERTY>
<NAME>C_PROPERTY</NAME>
</PROPERTY>
</PROPERTIES>
<DO_NOT_SORT_PROPS>
<PROPERTY>
<NAME>B_PROPERTY</NAME>
</PROPERTY>
<PROPERTY>
<NAME>C_PROPERTY</NAME>
</PROPERTY>
<PROPERTY>
<NAME>A_PROPERTY</NAME>
</PROPERTY>
</DO_NOT_SORT_PROPS>
<SOME_OTHER_NODES/>
</OBJECT>
<OBJECT name="C_Object">
<SOME_OTHER_NODES/>
</OBJECT>
</TEST>
Код:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ku="http://xmlns.oracle.com/ku">
<xsl:output encoding="UTF-8"/>
<!-- alphabetizes an xml tree -->
<xsl:template match="@* | * ">
<xsl:copy>
<xsl:apply-templates select="@* | * | text()">
<xsl:sort select="@name" data-type="text" order="ascending"/>
<xsl:sort select="ku:NAME" data-type="text" order="ascending"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
<xsl:template match="text()">
<xsl:value-of select="normalize-space(.)"/>
</xsl:template>
</xsl:stylesheet>
однако добиться исключения ветки <DO_NOT_SORT_PROPS> из правил у меня не получается
Надеюсь на форумчан.
С уваженим, Константин.