В Studio управления SQL щелкните правой кнопкой по базе данных и выберите "Свойства" из контекстного меню. Посмотрите на число "Размера".
Используя рекурсию, можно пройтись по строке в 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>
и в результате получил следующее:
User License Code
Имейте в виду, что пробелы и другие символы пробелов, как правило, удаляются из XML, именно поэтому я использовал вместо этого символ «*», который я перевел в пробел.
Конечно, этот код можно улучшить. Это то, что я мог придумать за 10 минут работы. На других языках это заняло бы меньше строк кода, но в XSLT это все еще довольно быстро, учитывая количество строк кода, которые он содержит.
Решение XSLT + FXSL (в XSLT 2.0, но почти тот же код будет работать с XSLT 1.0 и FXSL 1.x :
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:f="http://fxsl.sf.net/"
xmlns:testmap="testmap"
exclude-result-prefixes="f testmap"
>
<xsl:import href="../f/func-str-dvc-map.xsl"/>
<testmap:testmap/>
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/">
<xsl:variable name="vTestMap" select="document('')/*/testmap:*[1]"/>
'<xsl:value-of select="f:str-map($vTestMap, 'UserLicenseCode')"
/>'
</xsl:template>
<xsl:template name="mySplit" match="*[namespace-uri() = 'testmap']"
mode="f:FXSL">
<xsl:param name="arg1"/>
<xsl:value-of select=
"if(lower-case($arg1) ne $arg1)
then concat(' ', $arg1)
else $arg1
"/>
</xsl:template>
</xsl:stylesheet>
Когда вышеуказанное преобразование применяется к любому исходный XML-документ (не используется), будет получен ожидаемый правильный результат:
'Код лицензии пользователя'
Обратите внимание :
Мы используем версию DVC функции / шаблона FXSL str-map ()
. Это функция высшего порядка (HOF), которая принимает два аргумента: другую функцию и строку. str-map ()
применяет функцию к каждому символу строки. и возвращает объединение результатов.
Поскольку используется функция нижнего регистра () (в версии XSLT 2.0), мы не ограничены только латинским алфавитом.