Σε αυτό το post θα σας παρουσιάσω ένα θέμα το οποίο είναι κάτι που αντιμετωπίζουν οι web developers και ιδιαίτερα αυτοί που ασχολούνται με Content Management Systems (CMS).
Όπως είναι γνωστό σε αυτά αποθηκεύουμε το περιεχόμενο που βάζουμε στα sites μας, είτε σαν HTML, είτε σαν XML ή κάτι άλλο. Αρκετές είναι οι περιπτώσεις που χρειαζόμαστε να αντλήσουμε από αυτά μόνο το καθαρό περιεχόμενο αγνοώντας δηλαδή τα διάφορα HTML/XML tags.
Για να λυθεί το συγκεκριμένο πρόβλημα πρέπει να βρεθεί το pattern αυτό με το οποίο θα εντοπίζονται τα διάφορα tags ώστε να αποκλείονται από το τελικό αποτέλεσμα.
Η εύκολη προσέγγιση και μπορώ να πω και αποδεχτή είναι να υλοποιηθεί μια SQL-CLR function και η οποία να γίνει SQL Function.
Σε αυτή μπορούμε να κάνουμε χρήση ενός Regular Expression με βάση το οποίο θα γίνει αναζήτηση και αντικατάσταση των tags.
Όπως είπα και παραπάνω το μυστικό είναι λοιπόν να γράψεις σωστά το regex.
Αυτό το regex είναι το εξής "<[^>]*?>|<[^>]*>" και για το χρησιμοποιήσεις δεν έχει παρά να το εφαρμόσεις πάνω στον string που περιέχει τα δεδομένα περιεχομένου του CMS.
Μια απλή προσέγγιση για την λύση του προβλήματος είναι η παρακάτω
[Microsoft.SqlServer.Server.SqlFunction]
public static SqlString ClearHTMLTags ( SqlString s )
{
string pattern = @"<[^>]*?>|<[^>]*>";
Regex rgx = new Regex ( pattern );
return rgx.Replace ( s1 , String.Empty );
}
Η συγκεκριμένη υλοποίηση είναι το 90% της λύσης. Το υπόλοιπο 10% σας το αφήνω σαν άσκηση μιας και βρισκόμαστε τον μήνα που ξεκινάνε τα σχολεία.
Επίσης σαν T-SQL challenge σας αφήνω την υλοποίηση αυτής σε T-SQL. Θα ήθελα όμως να δω αυτές τις λύσεις και που ξέρετε μπορεί να έχουμε και νικητή με κέρδος ;)
/*antonch*/