We help IT Professionals succeed at work.

XSL: Replace underscore with a space?

greddin
greddin asked
on
Medium Priority
2,510 Views
Last Modified: 2012-06-22
In an xsl stylesheet how would I go about replacing the underscores "_" with a space in the Title nodes of my xml file below?

<?xml version="1.0" encoding="utf-8" ?>
<Folder xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <FolderID>466</FolderID>
  <ParentID>416</ParentID>
  <Title>Breast_Cancer</Title>
  <Description />
  <Folders>
    <Folder>
      <FolderID>470</FolderID>
      <ParentID>466</ParentID>
      <Title>Carcinoma_In_Situ</Title>
      <Description />
      <Folders />
    </Folder>
    <Folder>
      <FolderID>470</FolderID>
      <ParentID>466</ParentID>
      <Title>Complementary_Medicine</Title>
      <Description />
      <Folders />
    </Folder>
  </Folders>
</Folder>

Thank you.
Comment
Watch Question

Commented:
use the translate function whenever you call it's value,
eg. <xsl:value-of select="translate(Title,'_',' ')"/>

Author

Commented:
Thanks, I have this but it's not working:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ccs="CancerConsultants.Syndication" exclude-result-prefixes="ccs">
     <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
     <xsl:variable name="FolderCountHalf" select="(count(/ccs:Folder/ccs:Folders/ccs:Folder) + 1) div 2"/>
     <xsl:template match="/ccs:Folder">
          <html>
               <body>
                    <table border="1">
                         <xsl:for-each select="ccs:Folders/ccs:Folder[position() &lt;= $FolderCountHalf]">
                              <tr>
                                      <td><xsl:apply-templates select="."/><br/>
                                      <xsl:value-of select="translate(Title,'_',' ')"/>
                                      </td>
                                                      <td>
                                    <xsl:choose>
                                                      <xsl:when test="following-sibling::ccs:Folder[position() = $FolderCountHalf]">
                                                            <xsl:apply-templates select="following-sibling::ccs:Folder[position() = $FolderCountHalf]"/>
                                                      </xsl:when>
                                                      <xsl:otherwise>&#160;</xsl:otherwise>
                                                      </xsl:choose>
   
                                   </td>
                              </tr>
                         </xsl:for-each>
                    </table>
               </body>
          </html>
     </xsl:template>
     <xsl:template match="ccs:Folder">
          <a href="{ccs:FolderID}"><xsl:value-of select="ccs:Title"/></a>
     </xsl:template>
</xsl:stylesheet>
Commented:
Forgot, as your xml in this post didn't have the xmlns attribute, so you wouldn't get the Title because it doesn't match.

You only need to change the output template:

<xsl:template match="ccs:Folder">
  <a href="{ccs:FolderID}"><xsl:value-of select="translate(ccs:Title,'_', ' ')"/></a>
</xsl:template>

Not the solution you were looking for? Getting a personalized solution is easy.

Ask the Experts

Author

Commented:
Thank you so much again.
Access more of Experts Exchange with a free account
Thanks for using Experts Exchange.

Create a free account to continue.

Limited access with a free account allows you to:

  • View three pieces of content (articles, solutions, posts, and videos)
  • Ask the experts questions (counted toward content limit)
  • Customize your dashboard and profile

*This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

OR

Please enter a first name

Please enter a last name

8+ characters (letters, numbers, and a symbol)

By clicking, you agree to the Terms of Use and Privacy Policy.