我有一张超过100万行的表格。在此表中,我有一个包含大型XML文件(DataType XML)的列。现在我必须生成/找出所有这些XML文件的结构。
XML文件的结构通常是不同的 - 因此它并不总是相同的。是否有可能产生ie。所有这些行的XSD文件,以找出结构或评估xml文件中的标记?
您是否有任何想法/过程来获取所有这些xml文件的结构?
答案 0 :(得分:0)
不,没有通用的方式,至少没有我知道的...... 想象一下两个看起来相同的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 |
+----+-------------------------+-----------+----------+------------+