Перейти к содержимому

Фотография
- - - - -

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


  • Вы не можете создать новую тему
  • Закрытая тема Тема закрыта
В теме одно сообщение

#1 Shikaka

Shikaka

    Прохожий

    Топикстартер
  • Новичок
  • 0
    1 сообщ.

Отправлено 09 Сентябрь 2013 в 15:31

Здравствуйте.

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

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

Спонсор

#2 lekzd

lekzd

    parse error: parse error, unexpected T_STRING...

  • V.I.P.
  • 428
    1 125 сообщ.

Отправлено 09 Сентябрь 2013 в 16:00

А создать новый пустой шаблон match="DO_NOT_SORT_PROPS" ?
  • 0



Похожие темы Свернуть

  Название темы Форум Автор Статистика Последнее сообщение
Статистика

Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 скрытых пользователей