XSL - Как вы пишете с заглавной буквы - PullRequest
16 голосов
/ 08 марта 2012

У меня есть следующий xml.

<Name>
  <First>john</First>
  <Last>smith</Last>
</Name>

Я хочу использовать заглавную первую букву и вставить следующий формат.

 <FullName>John Smith</FullName>

Заранее спасибо.

Ответы [ 2 ]

28 голосов
/ 08 марта 2012

I.Решение XSLT 2.0 :

<xsl:stylesheet version="2.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="/*">
  <FullName><xsl:apply-templates/></FullName>
 </xsl:template>

 <xsl:template match="First|Last">
  <xsl:sequence select=
  "concat(upper-case(substring(.,1,1)),
          substring(., 2),
          ' '[not(last())]
         )
  "/>
 </xsl:template>
</xsl:stylesheet>

, когда это преобразование применяется к предоставленному документу XML :

<Name>
    <First>john</First>
    <Last>smith</Last>
</Name>

требуемый, правильный результатпроизводится :

<FullName>John Smith</FullName>

II.Решение XSLT 1.0 :

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:variable name="vLower" select=
 "'abcdefghijklmnopqrstuvwxyz'"/>

 <xsl:variable name="vUpper" select=
 "'ABCDEFGHIJKLMNOPQRSTUVWXYZ'"/>

 <xsl:template match="/*">
  <FullName><xsl:apply-templates/></FullName>
 </xsl:template>

 <xsl:template match="First|Last">
  <xsl:value-of select=
  "concat(translate(substring(.,1,1), $vLower, $vUpper),
          substring(., 2),
          substring(' ', 1 div not(position()=last()))
         )
  "/>
 </xsl:template>
</xsl:stylesheet>
0 голосов
/ 29 июля 2017

Попробуйте:

concat(
  translate(
    substring($Name, 1, 1),
    'abcdefghijklmnopqrstuvwxyz',
    'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  ),
  substring($Name,2,string-length($Name)-1)
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...