2016-04-18 2 views
1

У меня есть файл XSLT завален с комментариями, такими как:Отключить XSL: комментарий трансформации XSLT

<xsl:comment>Entering shipping block</xsl:comment> 

Есть ли способ отключить эти в явной форме комментариев, так что они не выводятся во время выполнения в производстве ? Вывод файла XSLT показан в открытом API, поэтому, хотя он полезен для отладки, я предпочел бы его отключить.

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

<xsl:if test="$enableDebug='true'"> 
    <xsl:comment>Entering shipping block</xsl:comment> 
</xsl:if> 

есть другой способ?

(я использую XSLT 2.0.)

+0

Существует атрибут 'use-when' https://www.w3.org/TR/xslt20/#conditional-inclusion, но я думаю, вам нужно будет использовать XSLT 3.0 и статический параметр, чтобы иметь возможность писать' ... ', в XSLT 2.0 вы можете применить атрибут' use-when', но я не думаю, что есть доступ к параметрам в представленное выражение. –

+0

Возможно, вы используете системное свойство 'use-when = '' '' '' '' '' '' ', но это зависит от процессора, независимо от того, как и как вы можете настроить свои собственные системные свойства. –

+1

Другой возможностью было бы применить второй XSLT к результату первого XLST, который удалит все комментарии из XML. –

ответ

0

Вы можете объявить переменную verbose на самом верху XSL:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output encoding="UTF-8" indent="yes" method="xml"/> 
    <xsl:variable name="verbose">1</xsl:variable> 
    <xsl:template match="@*|node()"> 
     <xsl:copy> 
     ... 

и оберните ваши комментарии в <xsl:if>, как это:

<xsl:if test="$verbose"> 
    <xsl:comment>Applying the template...</xsl:comment> 
</xsl:if> 

Если вы хотите, чтобы временно отключить комментарии, просто удалите 1 из переменной verbose:

<xsl:variable name="verbose"></xsl:variable> 
+1

Упс! Я только заметил, что у вас уже была эта идея, и попросил по-другому. –

+0

Кроме того, использование переменной-дерева-фрагмента в виде логического элемента довольно изворотливое. Почему бы не использовать логическую переменную ''? Опираясь на boolean() RTF, являющегося истинным, а boolean() строки с нулевой длиной, являющейся false, запрашивает проблемы. –

1

Просто включите этот шаг преобразования в развертывании производства:

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

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

Вы мой даже не указать indent атрибут <xsl:output> в случае читаемости не цель.

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