首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将XML数组拆分为单独的行(同时保持一致性)

如何将XML数组拆分为单独的行(同时保持一致性)
EN

Database Administration用户
提问于 2018-12-15 19:16:17
回答 1查看 3.6K关注 0票数 6

我正在处理这个确切的堆栈交换部分的数据库转储。在我工作期间,我遇到了一个我目前无法解决的问题。

在XML Posts.xml中,内容如下所示

当然有多行,但这就是其中之一。转储中已经给出了一个Tags.xml文件,这使得图片中的“标记”属性实际上应该是它的独立表(多到多)更加明显。

所以现在我想找出一种如何提取标签的方法。以下是我想做的事:

代码语言:javascript
复制
CREATE TABLE #TestingIdea (
Id int PRIMARY KEY IDENTITY (1,1),
PostId int NULL,
Tag nvarchar (MAX) NULL
)
GO

↑是我为测试代码而创建的表。我已经用标签和PostIds填好了

代码语言:javascript
复制
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

然而,此代码返回此错误。

代码语言:javascript
复制
XML parsing: line 1, character 37, illegal qualified name character

在谷歌上搜索了这个错误(包括这里)之后,无论人们拥有什么(比如额外的“分数”或不同的查集),我都没有。所以我有点被困住了。也许我错过了以前的答案中非常明显的一些东西--我在任何情况下都发现了T_T --我很感谢关于如何解决这个问题的任何帮助和建议。这是我最后一张还没有正常化的表格。

来自XML的小样本数据,对于任何对我用来查看https://pastebin.com/AW0Z8Be2文件的程序感兴趣的人来说都是如此(因此,像上面的图片一样,阅读起来要容易得多)。它被称为FOXE XML阅读器(免费的XML编辑器-第一个对象)

EN

回答 1

Database Administration用户

回答已采纳

发布于 2018-12-15 19:42:19

这样的东西能满足结果集吗?

表与数据

代码语言:javascript
复制
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

查询

代码语言:javascript
复制
SELECT PostId, RIGHT(value,len(value)-1) as SplitTag
FROM #TestingIdea 
CROSS APPLY string_split(tag,'>')
WHERE value != ''

结果

代码语言:javascript
复制
PostId  SplitTag
1   mysql
1   innodb
1   myisam
票数 8
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/225067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档