Таблица стилей XSLT: перевод текста в верхний регистр

Я использую таблицу стилей XSLT для создания документа Excel из файла XML. Одно из значений, которое я набираю, я хочу отобразить в верхнем регистре. Как это возможно?


person Community    schedule 30.07.2009    source источник
comment


Ответы (5)


XSLT 2.0 имеет функции fn: upper-case () и fn: lower-case (). Однако, если вы используете XSLT 1.0, вы можете использовать translate ():

<xsl:template match="/">
  <xsl:variable name="smallcase" select="'abcdefghijklmnopqrstuvwxyz'" />
  <xsl:variable name="uppercase" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'" />
  <xsl:value-of select="translate(doc, $smallcase, $uppercase)" />
</xsl:template>
person David Christiansen    schedule 30.07.2009
comment
+1, хотя это та же стратегия, что и в моем ответе с сохранением переменных букв, безусловно, более пригодное для повторного использования решение. - person Welbog; 30.07.2009
comment
Абсолютно красиво и легко :) - person Azhar Khorasany; 14.12.2012

Вы можете использовать функцию translate() в XSLT 1.0:

<xsl:value-of select="translate(//some-xpath,
                                'abcdefghijklmnopqrstuvwxyz',
                                'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" />

Если вам посчастливилось иметь доступ к XSLT 2.0, вы можете использовать функцию upper-case():

<xsl:value-of select="upper-case(//some-xpath)"/>

Дополнительные сведения см. На странице справки по функциям XPath.

person Welbog    schedule 30.07.2009
comment
Имя Аскера немного похоже на французское ... что случилось с é? (извините, я не удержался ...) - person AakashM; 30.07.2009
comment
@AakashM: Это проблема функции translate(). Вы должны указать все это сами. upper-case() - гораздо лучший вариант, но он не поддерживается достаточно широко. - person Welbog; 30.07.2009

XPath 2.0 имеет fn:upper-case(), что также делает правильный регистр Unicode сопоставления.

person Tomalak    schedule 30.07.2009

Используйте такую ​​сборку:

<msxsl:script implements-prefix="user" language="C#">
<!--{%assembly%}-->
<![CDATA[  

public string ToUpper(string stringValue)
{
    string result = String.Empty;

    if(!String.IsNullOrEmpty(stringValue))
    {
      result = stringValue.ToUpper(); 
    }

    return result;
}
]]>
</msxsl:script>

Назовите это так: select="user:ToUpper(//root/path)"

Это можно использовать в версиях 1.0 или 2.0.

person SparrowEatsHawk    schedule 13.10.2017

Самый простой и понятный способ преобразования регистра - это использование CSS.

создать класс, например:

.upper { text-transform: uppercase; }

затем используйте класс как класс span:

<span class="upper">
    <xsl:value-of select="myTextField" />
</span>

Это оно :)

Вы также можете использовать другие преобразования:

text-transform:  capitalize | uppercase | lowercase | none | inherit
person MojoJojo    schedule 01.12.2011
comment
Я считаю, что OP создавал файл Excel; не HTML. - person Daniel Haley; 01.12.2011
comment
Вы можете создавать файлы Excel с помощью HTML. Я верю, что он поддержит CSS, но я не уверен на 100%. - person iconoclast; 20.08.2013
comment
Решения не позволяют сравнивать текстовые элементы в документе без учета регистра, что часто является причиной принуждения текста к единому, непротиворечивому регистру. Это решение будет применяться только к выходному рендерингу результата. - person Pekka; 06.01.2015
comment
Я использую таблицу стилей XSLT - это ключ к успеху. @iconoclast Да, можно (клянусь, это не бессовестная вилка): jqueryscript.net/table/ - person rainabba; 13.11.2015