parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Помогите сочинитm xsl

MetaWizard 06.03.2003 00:16

У меня есть xml вида
<?xml version="1.0" ?> 
<list>
	<a par1="1"/>
	<a par2="1"/>
	<a par3="1"/>
	<a par1="1" par2="1"/>
	<a par1="1" par2="1" par3="1"/>
</list>
То есть у каждого тега <a> может быть любая комбинация атрибутов par1, par2, par3.

В .xsl несколько шаблонов вида:
если у <a> есть атрибут par1 вывести то-то,
если у <a> есть атрибут par2 вывести то-то...
...
<xsl:template match="a[@par1]">
...
</xsl:template>
<xsl:template match="a[@par2]">
...
</xsl:template>
Мне нужно, чтобы если у <a> несколько атрибутов, то к нему применились бы все соответствующие шаблоны
неважно в какой последовательности.
Решение с for-each и кучей if'ов мне не подходит, часть шаблонов будет импортироваться,
кол-во атрибутов может увеличиваться или уменьшатся,
при этом хочется просто удалять и добавлять соответствующие шаблоны, не трогая остальной код.

Cамое очевидное решение менять mode, примерно так:
<xsl:template match="a[@par1]">
...
<xsl:apply-template select="." mode="checkPar2"/>
</xsl:template>
<xsl:template match="a[@par2]" mode="checkPar2">
...
<xsl:apply-template select="." mode="checkPar3"/>
</xsl:template>
...
Но здесь опять же не достигается независимость шаблонов между собой.