Для устранения чего-либо, похожего на «отступ», может потребоваться (это означает, что в некоторых случаях вам нужно) использовать оба <xsl:strip-space>
и `` отступа = "нет" `.
Возьмите простейший пример : у вас есть преобразование идентичности. Без какого-либо из указанных двух методов преобразование будет воспроизводить текстовые узлы только для пробелов из исходного XML-документа. То есть, если исходный документ XML имеет отступ, преобразование также даст результат с отступом.
Теперь добавьте к этому преобразованию <xsl:output indent="no" />
. Это дает указание процессору XSLT не выполнять собственную "красивую печать". Однако узлы, содержащие только пробелы, из исходного XML-документа по-прежнему копируются в выходной документ, а итоговый документ выглядит по-прежнему с отступом (поскольку исходный документ имеет отступ).
Теперь, в качестве последнего шага, добавьте <xsl:strip-space elements="*"/>
. Вы указали оба метода предотвращения появления узлов только для пробелов в выходных данных. Что просходит? Процессор XSLT вообще не обрабатывает узлы только с пробелами, и он не выравнивает вывод - вы получаете желаемый однострочный плотный вывод.
Наконец, сделайте регрессию, измените <xsl:output indent="no" />
на <xsl:output indent="yes" />
. <xsl:strip-space elements="*"/>
все еще там, так что никакие узлы только для пробелов не воспроизводятся в выходных данных. Но процессор XSLT подчиняется директиве <xsl:output indent="yes" />
и добавляет собственные текстовые узлы только для пробелов.
Таким образом, из четырех возможных комбинаций только указание обоих <xsl:strip-space elements="*"/>
и <xsl:output indent="no" />
гарантирует, что отступы не будут вызываться ни узлами только для пробелов из исходного XML документ или от инициативы процессоров XSLT.
Даже этот последний случай, конечно, не полностью гарантирует, что вывод не будет иметь отступ - если программист XSLT преднамеренно поместит туда код отступа, такой как
<xsl:text>
</xsl:text>
вывод будет содержать этот отступ.