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



XML и XSLT


Сообщений в теме: 3

#1 Voffko

    WoW Gamemaster

  • Модераторы
  • PipPipPip
  • 421 сообщений
  • Пол:Мужчина
  • Город:Москва
  • АТС:291

Отправлено 04 Февраль 2012 - 14:03

Доброго времени суток.
Сейчас занялся учебой по XML и XSLT. Есть такая задача.
_______________________________________________________
Написать xsl-шаблон, который преобразует исходный XML в результирующий XML, в котором элементы <math> будут пронумерованы (добавится атрибут number) в порядке возрастания,
но учитывая не данное, а окончательное расположение, в котором элементы <feature> встанут на место <featureAnchor>ов с соответствующими id.

Исходный XML

<component>
	<sect1>
		<math id="c01-math-0001"/>
		<featureAnchor features="c01-fea-0001"/>
		<math id="c01-math-0002"/>
	</sect1>
	<sect1>
		<featureAnchor features="c01-fea-0002"/>
		<math id="c01-math-0003"/>
		<math id="c01-math-0004"/>
	</sect1>
	<featureGroup>
		<feature id="c01-fea-0001">
			<math id="c01-math-0005"/>
		</feature>
		<feature id="c01-fea-0002">
			<math id="c01-math-0006"/>
			<math id="c01-math-0007"/>
		</feature>
	</featureGroup>
</component>

Результирующий XML

<component>
	<sect1>
		<math number="1" id="c01-math-0001"/>
		<featureAnchor features="c01-fea-0001"/>
		<math number="3" id="c01-math-0002"/>
	</sect1>
	<sect1>
		<featureAnchor features="c01-fea-0002"/>
		<math number="6" id="c01-math-0003"/>
		<math number="7" id="c01-math-0004"/>
	</sect1>
	<featureGroup>
		<feature id="c01-fea-0001">
			<math number="2" id="c01-math-0005"/>
		</feature>
		<feature id="c01-fea-0002">
			<math number="4" id="c01-math-0006"/>
			<math number="5" id="c01-math-0007"/>
		</feature>
	</featureGroup>
</component>

Уважаемые господа XML программеры, помогите сделать такое задание, если будут подробные комментарии, будет еще лучше. Заранее спасибо :)

Надеюсь, модераторы удалят тему из веб-дизайна, в которую я запостил по ошибке.

Цитата

Нео, рано или поздно ты, как и я, поймешь, что есть разница между осознанием пути и следованием по нему.

#2 Voffko

    WoW Gamemaster

  • Модераторы
  • PipPipPip
  • 421 сообщений
  • Пол:Мужчина
  • Город:Москва
  • АТС:291

Отправлено 05 Февраль 2012 - 17:53

Знатоков нет? Проставлюсь хорошим коньяком :)

Цитата

Нео, рано или поздно ты, как и я, поймешь, что есть разница между осознанием пути и следованием по нему.

#3 Voffko

    WoW Gamemaster

  • Модераторы
  • PipPipPip
  • 421 сообщений
  • Пол:Мужчина
  • Город:Москва
  • АТС:291

Отправлено 09 Февраль 2012 - 16:05

Я вот что заметил:
Люди, которые являются выходцами из постсовеского пространства, менее коммуникабельны, чем западные коллеги. То есть, если задать вопрос, касающийся какой-либо специфической темы, как то - программирование, к примеру, постсовеские товарищи отвечают что-то типа "Читай литературу" или "Нууу **** если ты этого не знаешь то ты нуб, неудачник или еще чего". Аналогичный вопрос к людям-спецам из западных обычно приводит к решению проблемы. Там, видимо все-таки люди понимают, что если человек уж задал вопрос на специальном форуме, значит прочитанное в книгах либо было не совсем понятно для олтдельно взятого человека, либо не содержит в себе ответа на интересующий вопрос. Зачем нужны сообщества, специальные форумы или, как в данном случае, ветки касающиеся специальных тем, если на них никто ничего не пытается сделать? Знания нужны для того, чтобы ими делиться.
Именно поэтому западные страны оставляют всех далеко позади.
Будьте проще, господа, снисходите иногда до простых смертных. Глядишь - и вам в чем-нибудь тоже когда-нибудь помогут, а не отделаются мрачным молчанием или неприятными комментами.
Это оффтоп, е тперь, собственно сабж.

XSLT 1.0 шаблон:

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>

<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>

<xsl:template match="sect1/math">
<xsl:variable name="vNum">
<xsl:number level="any" count="sect1/*"/>
</xsl:variable>

<xsl:variable name="vnumParent">
<xsl:number level="any" count="sect1"/>
</xsl:variable>

<math number="{$vNum + $vnumParent -1}">
<xsl:apply-templates select="node()|@*"/>
</math>
</xsl:template>

<xsl:template match="feature/math">
<xsl:variable name="vNum">
<xsl:number level="any" count="feature/*"/>
</xsl:variable>

<xsl:variable name="vnumParent">
<xsl:number level="any" count="feature"/>
</xsl:variable>

<math number="{$vNum + $vnumParent}">
<xsl:apply-templates select="node()|@*"/>
</math>
</xsl:template>
</xsl:stylesheet>

Задача на XSLT 2.0. я думаю будет скоро. Хотя тему можно закрыть, чтобы тут не мусорили тролли.

Цитата

Нео, рано или поздно ты, как и я, поймешь, что есть разница между осознанием пути и следованием по нему.

#4 Bait

    Начинающий

  • Пользователи
  • Pip
  • 40 сообщений
  • Пол:Мужчина
  • Город:Бобруйск
  • АТС:030

Отправлено 09 Февраль 2012 - 22:41

Брат! Знал бы помог, век воли не видать!
Bc.uzMustDie team.





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

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






   myCounter   БЭМ