2014-09-18 4 views
0

Я обрабатываю несколько xml-файлов одним файлом xsl, некоторые файлы нужно обрабатывать по-разному, даже если они имеют одинаковую структуру. Поскольку количество файлов велико, а части, которые нужно обрабатывать по-разному, - это всего лишь несколько узлов, остальное одно и то же, я хочу сохранить одну таблицу стилей xsl. Я устанавливаю параметр externally, который сообщает, какой тип файла обрабатывается; с этой информацией, как мне сделать <template match.../> на одном и том же узле по-разному для разных файлов?Согласование шаблона XSLT в зависимости от значения переменной

EDIT: У меня было что-то вроде этого в виду, я знаю, что это не возможно, чтобы иметь шаблон матч внутри, если

<xsl:param name="type" /> <!-- this is set externally --> 
    <xsl:if test="$type = 'XYZ'"> 
     <xsl:template match="a/b"> 
     .... 
    </xsl:if> 

    <xsl:if test="$type = 'MNO'"> 
     <xsl:template match="a/b"> 
     .... 
    </xsl:if> 
+1

@JohnLBevan I» m using парсер саксона, я могу установить значение параметра externally – Rnet

+1

@JohnLBevan Это просто неправильно. Вы можете предоставить внешние параметры и открыть дополнительные XML-документы в любое время. –

ответ

2

Вы можете, конечно, написать

<xsl:param name="type" /> 

<xsl:template match="a/b[$type = 'XYZ']">...</xsl:template> 

<xsl:template match="a/b[$type = 'MNO']">...</xsl:template> 
+0

Это прекрасно работает! подумал, что это сработает, только если бы у меня был тест значения атрибута, с которым я мог бы «И»; Благодаря! – Rnet

Смежные вопросы