Zeilenumbruch für xml

MaMeSu

Neuer Benutzer
Beiträge
2
Hallo zusammen!

Ich habe folgendes Problem:

Ich möchte aus einer MSSQL Datenbank mittels Management Console einen Text aus einer Tabelle in eine xml Datei übergeben. Soweit ist das auch kein Problem. Die einzelne Textzeile der xml darf maximal 40 Zeichen lang sein. Dieses habe ich über substring und den Startpunkt gelöst. Auch das funktioniert soweit. Jetzt habe ich aber das Problem, dass halt genau nach den 40 Zeichen getrennt wird. Ich habe dadurch wilde Trennungen mitten im Wort, die unschön sind, wenn die Daten extern dargestellt werden sollen.
Hat jemand einen Lösungsansatz für mich? Ich bin definitv Laie was das Thema SQL angeht, von daher bitte für Dummies ;)
 
Werbung:
Hallo MaMeSu

Das Limit von 40 zeilen finde ich für XML etwas seltsam, wo kommt denn diese Limitierung her?
Wenn das Voraussetzung zur Trennung eines XML-Tags ist, dann bleibt dir ja nichts anders übrig als irgendwann mitten im Wort zu trennen.
Ansonsten musst du den Text Wort für Wort durchlaufen und die einzutragende Textlänge und die Länge des folgenden Wortes berücksichtigen.
Da gibt es aber sinnvollere Möglichkeiten als die Lösung auf dem SQL Server!

Geht aber natürlich auch auf dem SQL-Server:
Code:
DECLARE @txt varchar(max) = 'Ich möchte aus einer MSSQL Datenbank mittels Management Console einen Text aus einer Tabelle in eine xml Datei übergeben. Soweit ist das auch kein Problem. Die einzelne Textzeile der xml darf maximal 40 Zeichen lang sein. Dieses habe ich über substring und den Startpunkt gelöst. Auch das funktioniert soweit. Jetzt habe ich aber das Problem, dass halt genau nach den 40 Zeichen getrennt wird. Ich habe dadurch wilde Trennungen mitten im Wort, die unschön sind, wenn die Daten extern dargestellt werden sollen.
Hat jemand einen Lösungsansatz für mich? Ich bin definitv Laie was das Thema SQL angeht, von daher bitte für Dummies'


SELECT @txt, LEN(@txt)

WHILE CHARINDEX('  ', @txt) > 0
BEGIN
    SET @txt = REPLACE(@txt, '  ', ' ')
END

DECLARE @Wort varchar(255), @Ergebnis varchar(max) = '', @MaxLen int, @Zeile varchar(40) = ''
SET @txt = LTRIM(RTRIM(@txt))
SET @MaxLen = 40

WHILE LEN(@txt) > 0 AND CHARINDEX(' ', RTRIM(LTRIM(@txt))) != 0
BEGIN
    SET @Wort = LEFT(@txt, CHARINDEX(' ', @txt))
    print '<' + @Wort + '>'

    IF LEN(@Zeile) + LEN(@Wort) < @MaxLen
    BEGIN
        SET @Zeile += @Wort
        SET @txt = LTRIM(SUBSTRING(@txt, LEN(@Wort)+1, LEN(@txt)))
    END
    ELSE
    BEGIN
        SET @Ergebnis += '<row>' + @Zeile + '</row>'
        SET @Zeile = ''
    END

END

IF LEN(@txt) > 0
BEGIN
    IF LEN(@txt) + LEN(@Zeile) <= @MaxLen
    BEGIN
        SET @Zeile += @txt
        SET @Ergebnis += '<row>' + @Zeile + '</row>'
    END
    ELSE
    BEGIN
        SET @Ergebnis += '<row>' + @txt + '</row>'
    END
END

SELECT CAST(@Ergebnis as xml)

Viele Grüße,
Tommi
 
Werbung:
Vielen Dank für die schnelle Antwort!
Die Vorgabe kommt von einem Stammdatenprotal, in dem ich mittels der xml die Daten hochladen muss/will. Die bieten mir 99 Zeilen a 40 Zeichen dafür an. Ist sehr unglücklich gelöst, wie ich finde, aber leider nicht zu ändern.
Ich werde Deine Lösung testen!

Vielen Dank und schon einmal ein schönes langes Wochenende!

Gruß Matthias
 
Zurück
Oben