Copied to clipboard

Flag this post as spam?

This post will be reported to the moderators as potential spam to be looked at


  • Fuji Kusaka 2203 posts 4220 karma points
    May 12, 2011 @ 16:21
    Fuji Kusaka
    0

    Getting @nodeName in lowercase

    hi gUYS,

     

    Is there a way of converting my nodename  from uppercase to lowercase?

    That is getting Uppercase Nodename e.g PAGE 1 but publising it Page 1.

     

    //fuji

  • Bogdan 250 posts 427 karma points
    May 12, 2011 @ 16:34
    Bogdan
    1

    uComponents has some xslt extensions, among which for strings there's the method ToProperCase(String): http://ucomponents.codeplex.com/wikipage?title=Strings&referringTitle=Documentation Is this what you're looking for?

  • Fuji Kusaka 2203 posts 4220 karma points
    May 12, 2011 @ 16:37
    Fuji Kusaka
    0

    It might be a solution but is there a simple way of doing it where my XSLT is retrieving the data?

     

    //fuji

  • Bogdan 250 posts 427 karma points
    May 12, 2011 @ 17:00
    Bogdan
    0

    You could add the code in the xslt:

    ...
    xmlns:str="urn:smth:xslt"
    ...
    <msxsl:script language="C#" implements-prefix="str">
    <![CDATA[
    public string ToProperCase(string input)
            {
                if (string.IsNullOrEmpty(input))
                {
                    return string.Empty;
                }
                char[] chars = input.ToCharArray();
                chars[0] = char.ToUpper(chars[0]);
                return new string(chars);
            }
    ]]>
    </msxsl:script>
    and call it like <xsl:value-of select="str:ToProperCase('PAGE 1')"/>

     

  • Kim Andersen 1447 posts 2197 karma points MVP
    May 12, 2011 @ 22:11
    Kim Andersen
    1

    Hi Fuji

    If you want to convert your node name to lowercase you can do something like this:

    <xsl:value-of select="Exslt.ExsltStrings:lowercase(§currentPage/@nodeName)" />

    /Kim A

  • Chriztian Steinmeier 2800 posts 8791 karma points MVP 8x admin c-trib
    May 12, 2011 @ 22:12
    Chriztian Steinmeier
    1

    (Deleted - misread your question, it seems...)

    
    
    

    /Chriztian

     

  • Fuji Kusaka 2203 posts 4220 karma points
    May 13, 2011 @ 09:20
    Fuji Kusaka
    0

    Thanks everyone for the help....

    Well is works but am having the same issue either i used CSS to style it or Kim solution.

    What i want is to convert the nodeName to lowercase but keeping the first Letter in Uppercase

     

    E.g PAGE 1 => Page 1

  • Bogdan 250 posts 427 karma points
    May 13, 2011 @ 09:33
    Bogdan
    0

    My solution does exactly that.

  • Fuji Kusaka 2203 posts 4220 karma points
    May 13, 2011 @ 09:36
    Fuji Kusaka
    0

    Am getting loads of errors when saving the XSLT... do i just insert this piece of code

     

    <msxsl:script language="C#" implements-prefix="str">
    <![CDATA[
    public string ToProperCase(string input)
            {
                if (string.IsNullOrEmpty(input))
                {
                    return string.Empty;
                }
                char[] chars = input.ToCharArray();
                chars[0] = char.ToUpper(chars[0]);
                return new string(chars);
            }
    ]]>
    </msxsl:script>
  • Bogdan 250 posts 427 karma points
    May 13, 2011 @ 10:07
    Bogdan
    0

    I made a test now, and this works:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE xsl:stylesheet [ <!ENTITY nbsp "&#x00A0;"> ]>
    <xsl:stylesheet
      version="1.0"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      xmlns:msxml="urn:schemas-microsoft-com:xslt"
      xmlns:msxsl="urn:schemas-microsoft-com:xslt"
      xmlns:str="urn:smth:xslt"
      xmlns:umbraco.library="urn:umbraco.library" xmlns:Exslt.ExsltCommon="urn:Exslt.ExsltCommon" xmlns:Exslt.ExsltDatesAndTimes="urn:Exslt.ExsltDatesAndTimes" xmlns:Exslt.ExsltMath="urn:Exslt.ExsltMath" xmlns:Exslt.ExsltRegularExpressions="urn:Exslt.ExsltRegularExpressions" xmlns:Exslt.ExsltStrings="urn:Exslt.ExsltStrings" xmlns:Exslt.ExsltSets="urn:Exslt.ExsltSets"
      exclude-result-prefixes="msxml umbraco.library Exslt.ExsltCommon Exslt.ExsltDatesAndTimes Exslt.ExsltMath Exslt.ExsltRegularExpressions Exslt.ExsltStrings Exslt.ExsltSets ">


    <xsl:output method="xml" omit-xml-declaration="yes"/>

    <xsl:param name="currentPage"/>

    <xsl:template match="/">

    <xsl:value-of select="str:ToProperCase('PAGE 1')"/>

    </xsl:template>

    <msxsl:script language="C#" implements-prefix="str">
    <![CDATA[
    public string ToProperCase(string input)
            {
                if (string.IsNullOrEmpty(input))
                {
                    return string.Empty;
                }
                char[] chars = input.ToLower().ToCharArray();
                chars[0] = char.ToUpper(chars[0]);
                return new string(chars);
            }
    ]]>
    </msxsl:script>
        
    </xsl:stylesheet>

    Notice the two extra namespaces at the top

    xmlns:msxsl="urn:schemas-microsoft-com:xslt"
    xmlns:str="urn:smth:xslt"
  • Fuji Kusaka 2203 posts 4220 karma points
    May 13, 2011 @ 10:23
    Fuji Kusaka
    0

    Its still giving me the whole nodeName in Uppercase

    If I changed this

     chars[0] = char.ToUpper(chars[0]);

    to

     

     chars[0] = char.ToLower(chars[0]);

    only the first letter of my nodeName is in Lowercase but i only want first letter Uppercase and the rest LowerCase

     

  • Bogdan 250 posts 427 karma points
    May 13, 2011 @ 10:26
    Bogdan
    0

    In the above example please note that the line

    char[] chars = input.ToCharArray();

    was changed to

    char[] chars = input.ToLower().ToCharArray();
  • Fuji Kusaka 2203 posts 4220 karma points
    May 13, 2011 @ 10:44
    Fuji Kusaka
    0

    Thanks Got it working...

     

    //fuji

  • Fuji Kusaka 2203 posts 4220 karma points
    May 13, 2011 @ 10:53
    Fuji Kusaka
    0

    However how to i get another Uppercase if I have to come in a situation where I have a space between the name?

     

     

  • Petr Snobelt 923 posts 1535 karma points
    May 13, 2011 @ 11:17
    Petr Snobelt
    0

    If you wan pure xslt solution check out http://stackoverflow.com/questions/1207098/xslt-stylesheet-changing-text-to-upper-case (btw first answer on google)

    <xsl:template match="/">
     
    <xsl:value-of select="translate(doc, $smallcase, $uppercase)" />
    </xsl:template>
    <xsl:variable name="smallcase" select="'abcdefghijklmnopqrstuvwxyz'" />
    <xsl:variable name="uppercase" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'" />

     

     

  • Fuji Kusaka 2203 posts 4220 karma points
    May 13, 2011 @ 11:22
    Fuji Kusaka
    0

    Thanks Petr

  • Bogdan 250 posts 427 karma points
    May 13, 2011 @ 15:27
    Bogdan
    0

    Using translate will convert all the chars to uppercase, not only the first one, and will not convert the rest to lowcase.

  • Fuji Kusaka 2203 posts 4220 karma points
    May 13, 2011 @ 15:52
    Fuji Kusaka
    0

    Thats what i was thinking of. However how is a space interpreted in C#??

     

    A condition can be applied so that after each space the first Char will be a Uppercase and the rest LoweCase right?

     

    Fuji

  • Bogdan 250 posts 427 karma points
    May 13, 2011 @ 16:31
    Bogdan
    0

    You can do that like this


    <msxsl:script language="C#" implements-prefix="str">
    <![CDATA[
    public string ToProperCase(string input)
    {
        if (string.IsNullOrEmpty(input))
        {
            return string.Empty;
        }
        string[] words = input.Split(' ');
        string[] wordsPropper = new string[words.Length];
        int count = 0;
        foreach (string word in words)
        {
                    char[] chars = word.ToLower().ToCharArray();
                    chars[0] = char.ToUpper(chars[0]);
                    wordsPropper[count] = new string(chars);
                    count++;

        }
        return String.Join(" ", wordsPropper);
    }
    ]]>
    </msxsl:script>

     

    (it can probably be optimized)

     


  • Rick Mather 42 posts 124 karma points
    May 13, 2011 @ 16:58
    Rick Mather
    1

    You can also use .NET's ToTitleCase method to do this, so the extension above can be shortened to:

    public string ToProperCase(string input)
    {
      if(string.IsNullOrEmpty(input)) return string.Empty;
      System.Globalization.TextInfo textInfo = new System.Globalization.CultureInfo("", false).TextInfo; input = input.ToLower();
      return textInfo.ToTitleCase(input); }

  • Lee Kelleher 4026 posts 15837 karma points MVP 13x admin c-trib
    May 13, 2011 @ 17:16
    Lee Kelleher
    0

    Not to keep beating the uComponents drum, we've got ToTitleCase in there too! ;-)

  • This forum is in read-only mode while we transition to the new forum.

    You can continue this topic on the new forum by tapping the "Continue discussion" link below.

Please Sign in or register to post replies