Strippa HTML-taggar via XSLT och C-Sharp

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.


PS. If you like the blog post - please share it =D

Don't miss upcoming posts!

Sign up for my mailing list to get updates when new content is published.








Tillbaka