это должен быть простой вопрос, но мне не повезло в нескольких экспериментах.
Я использую XSLT для преобразования XML в CSV.У меня есть ключевые элементы вывода, определенные как переменные, таким образом -
<xsl:variable name="sep" select='"	"' />
<xsl:variable name="crlf" select='" "' />
<xsl:variable name="lf" select='" "' />
Входной XML выглядит следующим образом -
<unit>
<def>60 s</def>
<name><singular>minute</singular></name>
<symbol>min</symbol>
<definition>period of time equal to 60 seconds</definition>
</unit>
Некоторые единицы имеют имена как единственного, так и множественного числа, некоторые имеют только однои у некоторых нет имени (странно, но это то, с чем мне приходится иметь дело).
Когда я обнаруживаю единицу без элемента <name>
, мне нужно вывести два пустых столбца (два разделителя) в CSV.
В этом фрагменте XSLT-
<xsl:choose>
<xsl:when test="name">
<xsl:apply-templates select="name" />
<xsl:value-of select="$sep" />
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$sep" />
<xsl:value-of select="$sep" />
</xsl:otherwise>
</xsl:choose>
, имеющем два отдельных оператора <xsl:value-of select="$sep" />
, работает, но он кажется многословным.Есть ли более аккуратный способ?
Использование <xsl:value-of select="$sep$sep" />
не работает.Также не используется $sep$sep
непосредственно в предложении иначе или встраивается в элемент xsl: text.
Является ли синтаксический анализатор XSLT слишком ограниченным для интерполяции более чем одной переменной в строку или существует формулировкая пропускаю?
- ОБНОВЛЕНИЕ-- Мое чтение различных руководств xslt указывает на то, что синтаксис {$sep}{$sep}
должен работать в литеральном теле элемента xsl: match, но он также не работает.