<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>FlexiCoder Blog &#187; XSL/T</title>
	<atom:link href="http://www.flexicoder.com/blog/index.php/tag/xslt/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.flexicoder.com/blog</link>
	<description></description>
	<lastBuildDate>Wed, 28 Jul 2010 15:11:31 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>XSL/T Transform from String to String</title>
		<link>http://www.flexicoder.com/blog/index.php/2009/07/xslt-transform-from-string-to-string/</link>
		<comments>http://www.flexicoder.com/blog/index.php/2009/07/xslt-transform-from-string-to-string/#comments</comments>
		<pubDate>Wed, 22 Jul 2009 09:01:19 +0000</pubDate>
		<dc:creator>flexicoder</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[C# 3.5]]></category>
		<category><![CDATA[.Net code]]></category>
		<category><![CDATA[XML]]></category>
		<category><![CDATA[XSL/T]]></category>

		<guid isPermaLink="false">http://www.flexicoder.com/blog/?p=185</guid>
		<description><![CDATA[The following example transforms the supplied xml string, using XSL/T and outputs to another string


using (StringReader rdr = new StringReader(selectedLine.AdditionalInformation))
{
    XPathDocument doc = new XPathDocument(rdr);

    using (StringWriter writer = new StringWriter())
    {

        transformer.Transform(doc, null, writer);
     [...]]]></description>
			<content:encoded><![CDATA[<p>The following example transforms the supplied xml string, using XSL/T and outputs to another string<br />
<code></p>
<pre class="brush:c#">
using (StringReader rdr = new StringReader(selectedLine.AdditionalInformation))
{
    XPathDocument doc = new XPathDocument(rdr);

    using (StringWriter writer = new StringWriter())
    {

        transformer.Transform(doc, null, writer);
        titleLabel.Attributes.Add("onmouseover", string.Format(@"showDiv(""{0}"")", writer.ToString()));
    }
}
</pre>
<p></code><br />
The XSL/T loaded into the <em>transformer</em> variable is as follows<br />
<code>
<pre class="brush:xml">
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
    <xsl:output method="text" indent="no" omit-xml-declaration="yes"/>

        <xsl:template match="/">
<xsl:text>&lt;table class='panelTable'&gt;</xsl:text><xsl:apply-templates select="//Order"></xsl:apply-templates><xsl:text>&lt;/table&gt;</xsl:text>
        </xsl:template>
        <xsl:template match="Order">
<xsl:text>&lt;tr&gt;&lt;td colspan='2' class='TitlePanelHeader'&gt;</xsl:text><xsl:value-of select="@title"></xsl:value-of><xsl:text>&lt;/td&gt;&lt;/tr&gt;</xsl:text><xsl:apply-templates select="Info"></xsl:apply-templates>
        </xsl:template>
        <xsl:template match="Info">
<xsl:text>&lt;tr&gt;&lt;td&gt;</xsl:text><xsl:value-of select="@label"/><xsl:text>&lt;/td&gt;&lt;td&gt;</xsl:text><xsl:value-of select="@value"/><xsl:text>&lt;/td&gt;&lt;/tr&gt;</xsl:text>
        </xsl:template>
</xsl:stylesheet></pre>
<p></code><br />
And a sample xml string is as follows:<br />
<code>
<pre class="brush:xml">
<?xml version="1.0" encoding="utf-8"?>
<Order title='Body Rides'>
	<Info label='Additional answer code' value='' />
	<Info label='Additional answer date' value='' />
	<Info label='Answer code' value='' />
	<Info label='TOS' value=''/>
	<Info label='Answer date' value ='' />
	<Info label='Author' value='Richard Laymon'/>
	<Info label='Delivery to' value='Company Name, Address Line 1, AddressLine 2' />
	<Info label='Expected delivery' value='09/08/2009' />
	<Info label='Held orders' value=''/>
	<Info label='Ordered on' value='20/07/2009'/>
	<Info label='Print runs' value='' />
</Order>
</pre>
<p></code><br />
The result from the transformation is as follows:<br />
<code>
<pre class="brush:xml">
<table class="panelTable">
<tr>
<td colspan="2" class="TitlePanelHeader">Body Rides</td>
</tr>
<tr>
<td>Additional answer code</td>
<td/></tr>
<tr>
<td>Additional answer date</td>
<td/></tr>
<tr>
<td>Answer code</td>
<td/></tr>
<tr>
<td>TOS</td>
<td/></tr>
<tr>
<td>Answer date</td>
<td/></tr>
<tr>
<td>Author</td>
<td>Richard Laymon</td>
</tr>
<tr>
<td>Delivery to</td>
<td>Company Name, Address Line 1, AddressLine 2</td>
</tr>
<tr>
<td>Expected delivery</td>
<td>09/08/2009</td>
</tr>
<tr>
<td>Held orders</td>
<td/></tr>
<tr>
<td>Ordered on</td>
<td>20/07/2009</td>
</tr>
<tr>
<td>Print runs</td>
<td/></tr>
</table>
</pre>
<p></code><br />
The code to build up the xml within the object is below, note that the values are HtmlEncoded to ensure that there are no problems in the web page.<br />
<code>
<pre class="brush:c#">
public string AdditionalInformation
{
    get
    {
        StringBuilder builder = new StringBuilder();
        builder.Append(string.Format(CultureInfo.CurrentCulture,
                                        @"<Order title=""{0}"">",
                                        HttpUtility.HtmlEncode(this.Title)));
        AddLabelValue(builder, "Account number", ParentPurchaseOrder.AccountNumber);
        AddLabelValue(builder, "Additional answer code", this.AdditionalAnswerCode);
        AddLabelValue(builder, "Additional answer date",
            this.AdditionalAnswerDate.Year != 1 ? this.AdditionalAnswerDate.ToShortDateString() : "" );
        AddLabelValue(builder, "Answer code", this.AnswerCode);
        AddLabelValue(builder, "Answer date",
            this.AnswerDate.Year != 1 ? this.AnswerDate.ToShortDateString() : "");
        AddLabelValue(builder,"Author", this.Author);
        AddLabelValue(builder, "Delivery to",
            ParentPurchaseOrder.DeliveryName + ", " + ParentPurchaseOrder.Address1 + ", " +
                          ParentPurchaseOrder.Address2 + ", " +
                          ParentPurchaseOrder.Address3 + ", " +
                          ParentPurchaseOrder.Address4 + ", " +
                          ParentPurchaseOrder.Address5 + ", " +
                          ParentPurchaseOrder.Postcode);

        AddLabelValue(builder, "Expected delivery",
ParentPurchaseOrder.ExpectedDeliveryDate.ToShortDateString());
        AddLabelValue(builder, "Held orders", this.HeldOrders);
        AddLabelValue(builder, "Ordered on", ParentPurchaseOrder.OrderedOn.ToShortDateString());
        AddLabelValue(builder, "Print runs", this.PrintRuns);
                builder.Append("</Order>");

        return builder.ToString();

    }
}

private void AddLabelValue(StringBuilder builder, string label, string value)
{
      builder.Append(string.Format(CultureInfo.CurrentCulture,
                        @"<Info label=""{0}"" value=""{1}"" />",
                         label, HttpUtility.HtmlEncode(value)));
}
</pre>
<p></code></p>
<br/><a href="http://www.socialmarker.com/?link=http://www.flexicoder.com/blog/index.php/2009/07/xslt-transform-from-string-to-string/&title=XSL%2FT+Transform+from+String+to+String&text=The+following+example+transforms+the+supplied+xml+string%2C+using+XSL%2FT+and+outputs+to+another+string+++using+%28StringReader+rdr+%3D+new+StringReader%28selectedLine.AdditionalInformation%29%29+%7B++++...&tags=addlabelvalue+builder%2C+builder+append%2C+builder%2C+addlabelvalue%2C+parentpurchaseorder%2C+string%2C+answer" target="_blank"><img src= "http://www.socialmarker.com/bookmark.gif" border="0" /></a><noscript><a href="http://www.socialmarker.com" >Social Bookmarking</a></noscript>]]></content:encoded>
			<wfw:commentRss>http://www.flexicoder.com/blog/index.php/2009/07/xslt-transform-from-string-to-string/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
