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.