In meinem Datensatz habe ich ein Feld, in dem Text gespeichert ist, der mit HTML markiert ist. Das allgemeine Format ist wie folgt:
<html><head></head><body><p>My text.</p></body></html>
Ich könnte versuchen, das Problem zu lösen, indem ich Folgendes tue:
%Vor% Dies ist jedoch keine strikte Regel, da einige der Einträge die W3C-Standards unterbrechen und nicht beispielsweise <head>
-Tags enthalten. Schlimmer noch, könnten abschließende Tags fehlen . Also müsste ich die Funktion REPLACE
für jedes öffnende und schließende Tag einfügen, das existieren könnte.
Ich habe mich gefragt, ob es einen besseren Weg dafür gibt, als mehrere verschachtelte REPLACE
-Funktionen zu verwenden. Leider sind die einzigen Sprachen, die ich in dieser Umgebung zur Verfügung habe, SQL und Visual Basic (nicht .NET).
Wenn der HTML-Code gut formatiert ist, muss er nicht zum Parsen von XML verwendet werden.
Gießen oder konvertieren Sie es einfach in einen XML-Typ und holen Sie sich den / die Wert (e).
Hier ist ein Beispiel, um den Text von allen Tags auszugeben:
%Vor%Beachten Sie, dass die Ausgabe von Leerzeichen zwischen Umwandlung und Umwandlung unterschiedlich ist.
Um nur Inhalte von einem bestimmten Knoten zu erhalten, wird die Syntax XQuery verwendet. (XQuery basiert auf der XPath-Syntax)
Zum Beispiel:
%Vor% Ergebnis: My text.
Dies setzt natürlich immer noch ein gültiges XML voraus.
Wenn zum Beispiel ein schließendes Tag fehlt, würde dies einen XML parsing
Fehler verursachen.
Wenn HTML nicht gut als XML formatiert ist, könnte man PATINDEX & amp; SUBSTRING, um das erste p-Tag zu erhalten. Und dann wandle das in einen XML-Typ, um den Wert zu erhalten.
%Vor%oder über einen funky rekursiven Weg:
%Vor%Erstellen Sie zuerst eine benutzerdefinierte Funktion, die den HTML-Code wie folgt ausblendet:
%Vor%Wenn Sie versuchen, es auszuwählen:
%Vor%Dies sollte dazu führen, dass Sie mehrere verschachtelte replace-Anweisungen vermeiden müssen.
Kredit und weitere Informationen: Ссылка
Eine weitere Lösung, um einen Trick zu demonstrieren, um viele Werte einer Tabelle ( leicht zu pflegen !!! ) in einer einzigen Anweisung zu ersetzen:
- Fügen Sie hier Ersatzvorlagen hinzu:
%Vor%- Diese Funktion führt den "Trick"
aus %Vor%- Alle Beispiele, die ich in Ihrer Frage und in Kommentaren gefunden habe
%Vor%- das ist die eigentliche Abfrage
%Vor%- Aufräumen
%Vor% Wenn Sie der Template-Tabelle einen replace-Wert hinzufügen, könnten Sie sogar andere Werte als Ersatz verwenden, wie zB ein <br>
durch einen tatsächlichen Zeilenumbruch ersetzen ...
Dies ist nur ein Beispiel. Sie können dies im Skript verwenden, um alle HTML-Tags zu entfernen:
%Vor%Sie erwähnen, dass der XML-Code nicht immer gültig ist, aber immer den & lt; p & gt; und & lt; / p & gt; Tags?
In diesem Fall würde Folgendes funktionieren:
%Vor%Zum Auffinden aller Positionen eines & lt; p & gt; Innerhalb eines HTML gibt es bereits einen guten Post hier: Ссылка
Alternativ schlage ich vor, Visual Basic zu verwenden, wie Sie erwähnt haben, dass dies auch eine Option ist.
Tags und Links sql html sql-server xml tsql