1,625 articles and 12,403 comments as of Sunday, July 11th, 2010

Thursday, February 25, 2010

Unlocking the Mysteries of Data View Web Part XSL Tags – Part 11: xsl:value-of

Author: Marc D. Anderson
http://mdasblog.wordpress.com

<xsl:value-of>

Outputs the value to which it evaluates, whether it be the value of a column, a variable, etc.

<xsl:value-of> is sort of the “biggie” XSL tag.  It’s what you use to output values of things that are variable.  Pretty much every other tag we’ve talked about exists to get you to the point where you can use the <xsl:value-of> tag.  After all, if you didn’t want to output values from the items in your DataSource, you probably wouldn’t even bother with a Data View Web Part (DVWP), right?

Looking at the old standard example DVWP code, we see exactly one <xsl:value-of>:

<XSL><xsl:stylesheet xmlns:x="<a href="http://www.w3.org/2001/XMLSchema">http://www.w3.org/2001/XMLSchema</a>" xmlns:d="<a href="http://schemas.microsoft.com/sharepoint/dsp">http://schemas.microsoft.com/sharepoint/dsp</a>" version="1.0" exclude-result-prefixes="xsl msxsl ddwrt" xmlns:ddwrt="<a href="http://schemas.microsoft.com/WebParts/v2/DataView/runtime">http://schemas.microsoft.com/WebParts/v2/DataView/runtime</a>" xmlns:asp="<a href="http://schemas.microsoft.com/ASPNET/20">http://schemas.microsoft.com/ASPNET/20</a>" xmlns:__designer="<a href="http://schemas.microsoft.com/WebParts/v2/DataView/designer">http://schemas.microsoft.com/WebParts/v2/DataView/designer</a>" xmlns:xsl="<a href="http://www.w3.org/1999/XSL/Transform">http://www.w3.org/1999/XSL/Transform</a>" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:SharePoint="Microsoft.SharePoint.WebControls" xmlns:ddwrt2="urn:frontpage:internal">

<xsl:output method="html" indent="no"/>
<xsl:decimal-format NaN=""/>
<xsl:param name="dvt_apos">'</xsl:param>
<xsl:variable name="dvt_1_automode">0</xsl:variable>

<xsl:template match="/">
<xsl:call-template name="dvt_1"/>
</xsl:template>

<xsl:template name="dvt_1">
<xsl:variable name="dvt_StyleName">Table</xsl:variable>
<xsl:variable name="Rows" select="/dsQueryResponse/Rows/Row"/>
<table border="0" width="100%" cellpadding="2" cellspacing="0">
<tr valign="top">
<xsl:if test="$dvt_1_automode = '1'" ddwrt:cf_ignore="1">
<th width="1%" nowrap="nowrap"></th>
</xsl:if>
<th nowrap="nowrap">Title</th>
</tr>
<xsl:call-template name="dvt_1.body">
<xsl:with-param name="Rows" select="$Rows"/>
</xsl:call-template>
</table>
</xsl:template>

<xsl:template name="dvt_1.body">
<xsl:param name="Rows"/>
<xsl:for-each select="$Rows">
<xsl:call-template name="dvt_1.rowview"/>
</xsl:for-each>
</xsl:template>

<xsl:template name="dvt_1.rowview">
<tr>
<xsl:if test="position() mod 2 = 1">
<xsl:attribute name="class">ms-alternating</xsl:attribute>
</xsl:if>
<xsl:if test="$dvt_1_automode = '1'" ddwrt:cf_ignore="1">
<td width="1%" nowrap="nowrap">
<span ddwrt:amkeyfield="ID" ddwrt:amkeyvalue="ddwrt:EscapeDelims(string(@ID))" ddwrt:ammode="view"></span>
</td>
</xsl:if>
<td>
<xsl:value-of select="@Title"/>
</td>
</tr>
</xsl:template>
</xsl:stylesheet></XSL>

Yup, there it is, all the way at the bottom of the XSL:

<xsl:value-of select="@Title"/>

All it does is display the value of the Title column from items in the list.  However, all of the XSL leading up to it is what has framed it correctly: we’ve gotten the items we want from the DataSource, we’ve rendered a TABLE to contain things, and we’ve added title column headers (THs) to the table.  In the dvt_1.rowview template, we’ve started a new table row (TR) for each item and then (ignoring the two <xsl:if>s at the moment) we output a table detail cell (TD) containing the value of the Title column.  What a lot of work for that little tiny thing, right?

Well, obviously this is a tremendously simple example.  It’s only useful to see what items are in a list and not much else.  But once you have all of this in place, you can start tweaking, either through the Common Data View Tasks dialogs or by diving into the XSL yourself.  (I’m hoping that as we are nearing the end of this series, you won’t think that diving into the XSL is such a scary thing, after all.)

<xsl:value-of> can have only two attributes:


Attribute

Values

Description

select

XPath expression

The select can take the form of any value XPath expression. Most often, you’ll just specify a column name.  Other times you may want to do calculations or complex XPath stuff. You always need to have a select attribute.

disable-output-escaping

[no | yes]

This setting determines whether the text in the column is treated like regular text (“no”) or as text which contains markup (“yes”). [Optional]

As with <xsl:variable>, which we covered in an earlier article, the select attribute in the <xsl:value-of> can contain any valid XPath expression: plain text values, values of variables or columns, calculations, or very complex XPath expressions which pull data from multiple DataSources.

Here are some examples, going from truly simple to more complex:

<xsl:value-of select="’A’"/>
<xsl:value-of select="@Title"/>
<xsl:value-of select="substring-after($Title, ‘-‘)"/>
<xsl:value-of select="concat(100 * (@Sales - $Cost) / @Sales, ‘%’)"/>
<xsl:value-of select="@Author" disable-output-escaping=”yes” />

These examples will render:

  • The letter “A”
  • The contents of the Title column
  • The part of the Title column which follows a dash (“-“)
  • The gross margin, displayed as a percentage
  • The name of the person who was the author or the item (Created By).  By setting the disable-output-escaping=”yes”, we’re treating the value as markup.

Next up:

Some of the miscellaneous things you will likely see in your DVWP’s XSL.  Much of what I’ll cover has come from questions I’ve gotten directly during this series, as well as from threads I’ve answered in the MSDN Forums, right here at End User SharePoint’s Stump the Panel, and elsewhere.  If you have questions about anything that I haven’t covered so far, send ‘em along and I’ll try to cover them in the miscellaneous article.

Author: Marc D. Anderson
http://mdasblog.wordpress.com

Marc D. Anderson is a Co-Founder and the President of Sympraxis Consulting LLC, based in Newton, MA.  He has over 25 years of experience as a technology consultant and line manager across a wide spectrum of industries and organizational sizes.  Marc has done extensive consulting on knowledge management and collaboration and what makes them actually work in practice.  Marc is a very frequent “answerer” on the MSDN SharePoint – Design and Customization forum.

Entries in this series:
  1. Unlocking the Mysteries of Data View Web Part XSL Tags - Part 1: Overview
  2. Unlocking the Mysteries of Data View Web Part XSL Tags - Part 2: xsl:template
  3. Unlocking the Mysteries of Data View Web Part XSL Tags - Part 3: xsl:call-template
  4. Unlocking the Mysteries of Data View Web Part XSL Tags - Part 4: xsl:with-param
  5. Unlocking the Mysteries of Data View Web Part XSL Tags - Part 5: xsl:param
  6. Unlocking the Mysteries of Data View Web Part XSL Tags - Part 6: xsl:variable
  7. Unlocking the Mysteries of Data View Web Part XSL Tags - Part 7: xsl:for-each
  8. Unlocking the Mysteries of Data View Web Part XSL Tags - Part 8: xsl:sort
  9. Unlocking the Mysteries of Data View Web Part XSL Tags - Part 9: xsl:if
  10. Unlocking the Mysteries of Data View Web Part XSL Tags - Part 10: xsl:choose
  11. Unlocking the Mysteries of Data View Web Part XSL Tags - Part 11: xsl:value-of
  12. Unlocking the Mysteries of Data View Web Part XSL Tags - Part 12: Miscellaneous - Person or Group Columns
  13. Unlocking the Mysteries of Data View Web Part XSL Tags - Part 13: Miscellaneous - String Functions
  14. Unlocking the Mysteries of Data View Web Part XSL Tags – Part 14: Miscellaneous – ddwrt Namespace Functions
  15. Unlocking the Mysteries of Data View Web Part XSL Tags – Part 15: Miscellaneous – Field / Node Functions
  16. Unlocking the Mysteries of Data View Web Part XSL Tags – Part 16: Miscellaneous – xsl:attribute
  17. Unlocking the Mysteries of Data View Web Part XSL Tags – Part 17: Miscellaneous – xsl:comment and xsl:text
  18. Unlocking the Mysteries of Data View Web Part XSL Tags – Part 18: Miscellaneous – Some Math / Number Functions
  19. Unlocking the Mysteries of Data View Web Part XSL Tags – Part 19: Miscellaneous – More Math / Number Functions
  20. Unlocking the Mysteries of Data View Web Part XSL Tags – Part 20: xsl:import
  21. EUSP eBook Store: First SharePoint Title is Now Available
 

Please Join the Discussion

3 Responses to “Unlocking the Mysteries of Data View Web Part XSL Tags – Part 11: xsl:value-of”
  1. Ron says:

    Hi Marc

    Nice Articles i have gone through all posts in this series to solve mysteries of XSL.
    Please try to write post on to how call Jquery or JavaScript function in XSL on elements like
    Drop down.
    I want to call Jquery function on Dropdown onload event but no luck.

    Please advise me

  2. dawg3294 says:

    I’m still new to xsl, and I’m about halfway through reading this. So far, this is the best technical article I’ve ever read. Explaining things with normal English. Wow, what a concept. I wish more programming books did this.


Notify me of comments to this article:


Speak and you will be heard.

We check comments hourly.
If you want a pic to show with your comment, go get a gravatar!