Шаблон XSLT, чтобы избежать определенного режима - PullRequest
0 голосов
/ 10 мая 2018

У меня есть XSLT, который включает в себя множество модулей XSLT. Каждый подчиненный XSLT имеет свой режим для обработки. В основном XSLT есть шаблон идентификации, подобный этому

<xsl:template match="node()|@*" mode="#all" priority="-1">
    <xsl:copy>
        <xsl:apply-templates select="node()|@*" mode="#current"/>
    </xsl:copy>
</xsl:template>

но когда мы применили это к преобразованию, мы обнаружили, что какой-то режим, который не требует идентичного преобразования, конвертируется посредством этого, поэтому мы изменили это, как показано ниже, и он отлично работает:

<xsl:template match="node()|@*" mode="mode1 mode2 mode3 mode4 mode7 mode8" priority="-1">
    <xsl:copy>
        <xsl:apply-templates select="node()|@*" mode="#current"/>
    </xsl:copy>
</xsl:template>

Как я знаю, mode5 и mode6 не нуждаются в преобразовании идентичности и должны избегать его при преобразовании. Но с помощью описанной выше процедуры мы должны редактировать этот шаблон каждый раз, когда добавляем новый режим.

Существует ли какой-либо другой процесс, в котором мы применяем шаблон идентификации к режиму #all и избегаем только mode5 и mode6, чтобы избежать будущих конфликтов разработки.

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

Я не думаю, что есть способ определить, например, mode="#all except (mode5, mode6)" так что я боюсь, что ответ - нет, вам придется внести некоторые изменения.

0 голосов
/ 10 мая 2018

Способ XSLT 3.0 состоит в том, чтобы объявить режимы с их действием по умолчанию:

<xsl:mode name="mode1" on-no-match="shallow-copy"/>
<xsl:mode name="mode2" on-no-match="shallow-copy"/>
<xsl:mode name="mode3" on-no-match="shallow-copy"/>
<xsl:mode name="mode4" on-no-match="shallow-copy"/>
<xsl:mode name="mode7" on-no-match="deep-skip"/>
<xsl:mode name="mode8" on-no-match="fail"/>

и когда у вас есть один режим для модуля, как вы, кажется, обычно помещаете объявление режима в модуль.

Это, вероятно, не поможет вам напрямую. Но, используя подход «один режим на модуль», я был бы склонен реплицировать шаблонное правило по умолчанию в каждом модуле, где оно применяется, только для одного режима, а не использовать списки режимов или mode="#all".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...