go backarticles

Articles of SQLschool.gr Team

Σε αυτό το 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*/


Antonios Chatzipavlis

Antonios Chatzipavlis

Antonios is a Data Solutions Consultant and Trainer. He has been working in IT since 1988. In his career, he has worked as senior developer, IT Manager, Solutions Architect and IT Consultant. Since 1995 he has been devoted on new technologies and software development tools, mainly by Microsoft, either by training company staff and colleagues or assisting them in design, development and implementation as a consultant or chief developer. He has focused in Databases and Data Science since 1995. He specialized in Microsoft SQL Server since version 6.0 in areas like SQL Server Internals, Database Design and Development, Business Intelligence and in 2010 he has started working with Azure Data Platform, NoSQL databases, Big Data Technologies and Machine Learning. He is an active member of many IT communities in Greece, answering colleagues' questions and writing articles in his web site. He is the owner of SQLschool.gr which is a community portal with a lot of information about Microsoft SQL Server. He has been a Microsoft Certified Trainer (MCT) since 2000. Microsoft honored him as MVP on Data Platform due to his activities in SQL Server since 2010. He holds a large number of Microsoft Certifications and Microsoft SQL Server Certifications since version 6.5.


Comments

user-gravatar

On 27 Sep 2012 @ 9:23 PM Γαβρίλης wrote:

Θα ήθελα να διαφωνίσω (πλήρως).Η απάντηση στο Stackoverflow: http://stackoverflow.com/a/1732454/128165 νομίζω τα λέει όλα..Εκτός και αν μιλάμε για αυστηρά ελεγχόμενο/προσδιορισμένο υποσύνολο της HTML.

user-gravatar

On 27 Sep 2012 @ 9:52 PM antonch wrote:

Νομίζω ότι ήμουν σαφής στον προσδιορισμό μου. Δεν μίλησα γενικά για την HTML αλλά για την HTML που συνήθως υπάρχει σε ένα CMS και που είναι συγκεκριμένη καθώς δεν επιτρέπονται όλα. Άρα το περιεχόμενο είναι συγκεκριμένο και προσδιορισμένο. Η συγκεκριμένη ανάγκη βγήκε σε μένα όταν θέλησα να κάνω migrate το blog μου από την wordpress εδώ. Και όπως φαντάζομαι γνωρίζεις δεν μπορείς να βάλεις ότι tag θέλεις σε αυτή την πλατφόρμα αλλά και σε πολλές άλλες που τουλάχιστον προσωπικά έχω δουλέψει. Το συγκεκριμένο δουλεύει αρκετά καλά σε πολλές περιπτώσεις. Σίγουρα θα υπάρχουν και περιπτώσεις που θα αποτύχει αλλά ναι σε ένα τέτοιο περιβάλλον τα αποτελέσματα του είναι άριστα.

Leave your comment

COMMENT

FULL NAME

EMAIL ADDRESS

We use Gravatar

WEB SITE



captcha


 

Newsletter

If you want to receive updates from us subscribe below with your email.
Follow us in
PASS chapter logo

The Official PASS Local Group for Greece

About us Contact us Terms of Use Privacy Sing in Register
sql school greece logo
© 2010-2020 All rights reserved

This site uses cookies for operational and analytics purposes only. By continuing to browse this site, you agree to their use.