Создать структуру XML из столбца XML в SQL Server - PullRequest
0 голосов
/ 07 июня 2018

У меня есть таблица с более чем 1 миллионом строк.В этой таблице у меня есть столбец с большими файлами XML (DataType XML).Теперь я должен сгенерировать / выяснить структуру всех этих XML-файлов.

Структура XML-файлов, как правило, различна - поэтому она не всегда одинакова.Есть ли возможность сгенерировать т.е.XSD-файл для всех этих строк, чтобы узнать структуру или оценить теги внутри xml-файла?

Есть ли у вас какие-либо идеи / процессы для получения структуры всех этих xml-файлов?

1 Ответ

0 голосов
/ 07 июня 2018

Нет, нет общего способа, по крайней мере, такого, который я знаю ... Представьте себе два XML-файла, которые выглядят одинаково, но у одного есть дочерний элемент, который отсутствует в другом.Это может быть та же схема или нет ...

При таком подходе вы можете получить некоторые метаданные .Запишите это в вспомогательный стол и попробуйте использовать GROUP BY, чтобы найти семейства XML

DECLARE @tbl TABLE(ID INT IDENTITY, ShortDescr VARCHAR(100), YourXML XML);
INSERT INTO @tbl VALUES
 ('root and test', N'<root><test/></root>')
,('root and test and more', N'<root><test/><a /><b /></root>')
,('blah and test', N'<blah><test/></blah>')
,('no root (blah and blub)', N'<blah></blah><blub />')
,('no content', NULL)
;

SELECT t.ID
      ,t.ShortDescr
      ,CASE ISNULL(t.YourXML.value('count(/*)','int'),0)
            WHEN 1 THEN 'HasRoot'
            WHEN 0 THEN 'empty'
            ELSE 'Fragment' END AS XmlFormat
      ,t.YourXML.value('local-name((/*)[1])','nvarchar(max)') AS RootName 
      ,t.YourXML.value('local-name((/*[1]/*)[1])','nvarchar(max)') AS FirstChild
FROM @tbl t;

Результат для этого:

+----+-------------------------+-----------+----------+------------+
| ID | ShortDescr              | XmlFormat | RootName | FirstChild |
+----+-------------------------+-----------+----------+------------+
| 1  | root and test           | HasRoot   | root     | test       |
+----+-------------------------+-----------+----------+------------+
| 2  | root and test and more  | HasRoot   | root     | test       |
+----+-------------------------+-----------+----------+------------+
| 3  | blah and test           | HasRoot   | blah     | test       |
+----+-------------------------+-----------+----------+------------+
| 4  | no root (blah and blub) | Fragment  | blah     |            |
+----+-------------------------+-----------+----------+------------+
| 5  | no content              | empty     | NULL     | NULL       |
+----+-------------------------+-----------+----------+------------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...