Помогите частично отсортировать XML

Статус
Закрыто для дальнейших ответов.

Shikaka

Новичок
Регистрация
09.09.2013
Сообщения
1
Здравствуйте.

Вот упрощенный вариант имеющихся 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>
Проблема в том. что данная XSLT сортирует и то, что сортировать не надо.
однако добиться исключения ветки <DO_NOT_SORT_PROPS> из правил у меня не получается :(
Надеюсь на форумчан.

С уваженим, Константин.
 

lekzd

parse error: parse error, unexpected T_STRING...
Регистрация
17.02.2011
Сообщения
1 125
А создать новый пустой шаблон match="DO_NOT_SORT_PROPS" ?
 
Статус
Закрыто для дальнейших ответов.
Верх Низ