sqlschool.gr logo

articles

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*/

Comments

27 Sep 2012 @ 9:23 PM

user-gravatar

Γαβρίλης

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

27 Sep 2012 @ 9:52 PM

user-gravatar

antonch

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

Antonios Chatzipavlis

Antonios Chatzipavlis

Antonios Chatzipavlis is a highly experienced Data Solutions Consultant and Trainer. He has been working in the IT industry since 1988, holding various roles such as senior developer, IT Manager, Data & AI Solutions Architect and Consultant.

Since 1995, Antonios has focused on modern technologies and software development tools, primarily by Microsoft. He has specialized in Data & AI since 2000, with expertise in Microsoft Data Platform (SQL Server, Azure SQL Databases, Azure Synapse Analytics, Microsoft Fabric, Power BI, AI) and Databricks.

Antonios is also a Microsoft Certified Trainer (MCT) for over 25 years, has been recognized as a Microsoft Most Valuable Professional (MVP) in Data Platform since 2010 and he is in the Data Expert 40 Powerlist 2024 by Boussias. He is the co-founder and visionary behind XLYTiCA, a company dedicated to Data & AI solutions.

Episode

Task Flows in Microsoft Fabric

image

More Episodes...

Tip

What's New in SQL Server 2022 - Episodes

More Tips...

Become a member

If you want to receive updates from us become a member to our community.

Connect

Explore

Learn


sqlschool.gr © 2010-2025 All rights reserved

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