How To Escape XSL Parameters In Sharepoint Designer Site Pages



TODO:

Have you ever had data from Sharepoint display as for instance '&' rather than '&'

 

SOLUTION:

The solution is simple, just escape the XSL Parameter as follows:

<xsl:value-of select="@MyDataParam" disable-output-escaping="yes" />

 

NOTES:

There are no notes on this topic.

How To Skip The First X Nodes During foreach Loop In XSLT



TODO:

Have you ever wanted to skip the first X nodes during a foreach loop?  In my case, I was taking a flat CSV file and turning it into a generic XML document.  I was then using XSLT to transform that document into a meaningful XML document representing Customer.  The first 2 rows of my CSV file, were header and file information only, therfore I did not want to process them.  Rather than hard code the rows to skip in a pre-processor for the flat file, I can just transform the data to my final document, and then skip X rows in XSLT.  I was using XSLT anyhow to create my customer document, so it was just as easy to put the logic there.

 

SOLUTION:

 

<?xml version='1.0' ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
    <Customers>
      <xsl:variable name="myRootNode" select="."/>
      <xsl:for-each select="$myRootNode/MyNodes/Node">
        <xsl:variable name="myNode" select="."/>
        <xsl:if test="position() > 2">
           <Customer>
             Do Your Other XSLT Stuff Here ...
           </Customer>
        </xsl:if>
      </xsl:for-each>
    </Customers>
  </xsl:template>
</xsl:stylesheet>

 

NOTES:

This will skip the first 2 nodes I encounter, which represents the first 2 header rows that I had in my document.

How to Transform XML Using XSLT And Deserialize The Result Using C#



TODO:

Have you ever wanted to load an XML Document, transform it using XSLT, and conver the result into a Class object?  This is handly so that you could take XML in various formats, use XSLT to transform it, and load it into Classes that your system knows about.

 

SOLUTION:

Dog myDog = new Dog();
XmlSerializer xmlSerial = new XmlSerializer(typeof(Dog));   //create the xmlserializer for class Dog
XmlDocument myXMLDocument = new XmlDocument();              //create the xml document
StringBuilder output = new StringBuilder();                 //create the string builder for the output
XslCompiledTransform myXslTrans = new XslCompiledTransform();  //create the xsl obj for transformation
XmlWriterSettings writerSettings = new XmlWriterSettings();    //create the writer settings object, as we want to omit XML declaration
writerSettings.OmitXmlDeclaration = true;                      //now set the omit flag to true
myXMLDocument.Load(@"c:\DogInput.xml");

//load xslt file
myXslTrans.Load(xsltfile);

//create an xmlwriter of out data
using (XmlWriter transformedData = XmlWriter.Create(output, writerSettings))
{
     //transform the document
     myXslTrans.Transform(myXMLDocument, transformedData);

     //now turn the string builder into an obj
     using (StringReader xmlString = new StringReader(output.ToString()))
     {
          myDog = (Dog)(xmlSerial.Deserialize(xmlString));
     }
}

 

NOTES:

Dog is a class i created to illustrate this task, you will put your classname in place of it.  The variable "xsltfile" is the path to your XSLT file.