När innehåll från en html-editor skall visas i listor eller i andra flöden kan det vara smidigt att "stippta" eller radera/filtrera bort HTML-taggar.
Alltså detta:
<h1>Hello World</h1> <p>I´m here</p>
Blir till:
Hello World I´m here
Hur gör man då? Faktum är att lösningen är väldigt enkel. Jag skapade en egen c-sharp funktion som kör ett regex och sedan beräknar längden på inlägget för att veta om det skall kortas ned eller inte:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE xsl:stylesheet [ <!ENTITY nbsp " "> ]> <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:umbraco.library="urn:umbraco.library" xmlns:em="urn:em" exclude-result-prefixes="msxml umbraco.library"> <xsl:output method="xml" omit-xml-declaration="yes" /> <xsl:param name="currentPage"/> <!-- ******* SCRIPTS STARTS HERE *********** --> <msxsl:script language="CSharp" implements-prefix="em"> <![CDATA[ // Removes all HTML-taggs from parameter-string public string generatePreview(string strHTML) { // Setting default string-length int intDefaultLength = 200; // Removing HTML-tags using regex strHTML= Regex.Replace(strHTML, "<[^>]*>", String.Empty); if(strHTML.Length > intDefaultLength) { return strHTML.Substring(0,intDefaultLength) + "..."; } else { return strHTML; } } ]]> </msxsl:script> <!-- ******* SCRIPTS ENDSHERE *********** --> <xsl:template match="/"> <!-- The fun starts here --> <p><xsl:value-of select="em:generatePreview($currentPage/data [@alias = 'HTMLContent'])" disable-output-escaping="yes"/></p> </xsl:template> </xsl:stylesheet>
Självklart kan man, om man vill skapa och kompilera sin egen extension till XSLT, då kan man ha med denna funktionalitet i sin extention. Detta är att föredra om man ska använda funktionen på många olika XSLT-mallar.