我正在处理这个确切的堆栈交换部分的数据库转储。在我处理它时,我遇到了一个我目前无法解决的问题。
在 XML 文件 Posts.xml 中,内容如下所示
当然有多行,但这就是一个看起来的样子。转储中已经给出了一个 Tags.xml 文件,这使得该图片中的“Tags”属性实际上应该是其单独的表(多对多)更加明显。
所以现在我正试图找出一种如何提取标签的方法。这是我试图做的:
CREATE TABLE #TestingIdea (
Id int PRIMARY KEY IDENTITY (1,1),
PostId int NULL,
Tag nvarchar (MAX) NULL
)
GO
↑ 我为测试我的代码而创建的表。我已经用标签和 PostIds 填充了它
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
然而此代码返回此错误
XML parsing: line 1, character 37, illegal qualified name character
在谷歌搜索这个错误(包括这里)之后,无论人们有什么(比如额外的 " 标记或不同的 CHAR 集)我都没有。所以我有点卡住了。也许我错过了从以前的答案中非常明显的东西我发现 T_T 无论如何感谢任何有关如何解决此问题的帮助和建议。这是我尚未标准化的最后一张表。
XML 文件中的小样本数据 https://pastebin.com/AW0Z8Be2 对于任何对我用来查看 XML 文件的程序感兴趣的人(所以它更容易阅读,如上图所示)。它被称为 FOXE XML Reader(免费 XML 编辑器 - 第一个对象)
这样的事情是否满足结果集?
表格和数据
询问
结果