Используя рекурсию, можно пройти через строку в XSLT для оценки каждого символа. Для этого создайте новый шаблон, который принимает только один строковый параметр. Проверьте первый символ, и если это символ верхнего регистра, напишите пробел. Затем напишите символ. Затем снова вызовите шаблон с остальными символами внутри одной строки. Это приведет к тому, что вы хотите сделать.
Это будет ваша указатель. Мне нужно некоторое время, чтобы выработать шаблон. :-)
Прошло некоторое тестирование, особенно, чтобы получить пространство внутри всего. (Я неправильно символ для этого!) Но этот код должен дать вам идею ...
Я использовал этот XML:
<?xml version="1.0" encoding="UTF-8"?>
<blah>UserLicenseCode</blah>
, а затем эту таблицу стилей:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:output method="text"/>
<xsl:variable name="Space">*</xsl:variable>
<xsl:template match="blah">
<xsl:variable name="Split">
<xsl:call-template name="Split">
<xsl:with-param name="Value" select="."/>
<xsl:with-param name="First" select="true()"/>
</xsl:call-template></xsl:variable>
<xsl:value-of select="translate($Split, '*', ' ')" />
</xsl:template>
<xsl:template name="Split">
<xsl:param name="Value"/>
<xsl:param name="First" select="false()"/>
<xsl:if test="$Value!=''">
<xsl:variable name="FirstChar" select="substring($Value, 1, 1)"/>
<xsl:variable name="Rest" select="substring-after($Value, $FirstChar)"/>
<xsl:if test="not($First)">
<xsl:if test="translate($FirstChar, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', '..........................')= '.'">
<xsl:value-of select="$Space"/>
</xsl:if>
</xsl:if>
<xsl:value-of select="$FirstChar"/>
<xsl:call-template name="Split">
<xsl:with-param name="Value" select="$Rest"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
и I получил это как результат:
User License Code
ли иметь в виду, что пробелы и другие пробельные символы имеют тенденцию быть отбрасываются фр om XML, поэтому я использовал вместо этого «*», который я перевел в пространство.
Конечно, этот код можно было бы улучшить. Это то, что я мог придумать за 10 минут работы. На других языках это займет меньше строк кода, но в XSLT все еще довольно быстро, учитывая количество строк кода, которое оно содержит.
+1, потому что XSLT остается для меня загадкой, поэтому пока я не могу помочь *, я определенно наблюдаю за развитием событий здесь. –
+1 для мышления это сложно, а на самом деле это просто код. :-) Ничто не сложно, когда вы знаете, как это сделать. –