it-swarm.com.de

Aufteilen des XML-Arrays in separate Zeilen (unter Wahrung der Konsistenz)

Ich arbeite am Datenbank-Dump dieses genauen Stack-Exchange-Abschnitts. Während ich daran arbeite, bin ich auf ein Problem gestoßen, das ich derzeit nicht lösen kann.

In der XML-Datei Posts.xml sieht der Inhalt folgendermaßen aus

(enter image description here

Es gibt natürlich mehrere Zeilen, aber so sieht eine aus. Es gibt bereits eine Tags.xml-Datei im Speicherauszug, was noch deutlicher macht, dass das Attribut "Tags" in diesem Bild tatsächlich eine separate Tabelle sein soll (viele zu viele).

Im Moment versuche ich herauszufinden, wie die Tags extrahiert werden können. Folgendes habe ich versucht:

CREATE TABLE #TestingIdea (
Id int PRIMARY KEY IDENTITY (1,1),
PostId int NULL,
Tag nvarchar (MAX) NULL
)
GO

↑ Die Tabelle, die ich zum Testen meines Codes erstellt habe. Ich habe es bereits mit den Tags und PostIds gefüllt

SELECT  T1.PostId,
        S.SplitTag
FROM (
    SELECT  T.PostId, 
            cast('<X>'+ REPLACE(T.Tag,'>','</X><X>') + '</X>' as XML) AS NewTag
    FROM #TestingIdea AS T
    ) AS T1
CROSS APPLY (
    SELECT tData.value('.','nvarchar(30)') SplitTag
    FROM T1.NewTag.nodes('X') AS T(tData)
    ) AS S
GO

Dieser Code gibt diesen Fehler jedoch zurück

XML parsing: line 1, character 37, illegal qualified name character

Nachdem ich diesen Fehler gegoogelt hatte (einschließlich hier), was auch immer die Leute hatten (wie zusätzliche "Markierungen oder verschiedene CHAR-Sätze), die ich nicht hatte. Also stecke ich irgendwie fest. Vielleicht habe ich etwas sehr offensichtliches aus früheren Antworten verpasst, die ich T_T gefunden habe. Auf jeden Fall Ich freue mich über jede Hilfe und jeden Rat, wie ich das angehen kann. Es ist der letzte Tisch, den ich noch nicht normalisiert habe.

Kleine Beispieldaten aus der XML-Datei https://Pastebin.com/AW0Z8Be2 Für alle, die sich für das Programm interessieren, das ich verwende XML-Dateien anzeigen (so ist es viel einfacher zu lesen, wie in diesem Bild oben). Es heißt FOXE XML Reader (Freier XML-Editor - Erstes Objekt)

6
Chessbrain

Befriedigt so etwas die Ergebnismenge?

Tabelle & Daten

CREATE TABLE #TestingIdea (
Id int PRIMARY KEY IDENTITY (1,1),
PostId int NULL,
Tag nvarchar (MAX) NULL
)

INSERT INTO #TestingIdea(PostId,Tag)
VALUES(1,'<mysql><innodb><myisam>')

GO

Abfrage

SELECT PostId, RIGHT(value,len(value)-1) as SplitTag
FROM #TestingIdea 
CROSS APPLY string_split(tag,'>')
WHERE value != ''

Ergebnis

PostId  SplitTag
1   mysql
1   innodb
1   myisam
8
Randi Vertongen