繁体   English   中英

将 XML 数据解析成 Rows in SQL Server

[英]Parse out XML data into Rows in SQL Server

我正在尝试从 Elasticsearch 结构解析我们 SQL 服务器中的 WordPress 数据。

这是一条记录的一个字段的内容;

<category domain="category" nicename="featured">Featured</category>
<category domain="post_tag" nicename="name1">Name 1</category>
<category domain="post_tag" nicename="name-2">Name 2</category>
<category domain="post_tag" nicename="different-name">Different Name</category>
<category domain="type" nicename="something-else">Something Else</category>

我想将其解析为一个表,其中包含标题 Domain、NiceName 和 Contents 以及数据中每个节点的一行。 沿着这些方向的东西;

领域 好名字 内容
类别 精选 精选
post_tag 姓名1 姓名 1
post_tag 名字-2 姓名 2
post_tag 异名 不同的名字
类型 别的东西 别的东西

数据中每一行的节点数都不同,并且可以以任何顺序出现。 目前,数据存储在 varchar 数据类型中,但如果最好使用 XML 之类的内容进行解析,则可以对其进行修改。

建议您使用xml数据类型存储 XML 数据。 但是,如果您必须将它存储在varchar列中,您可以使用try_cast将其转换为 XML(如果它实际上不是有效的 XML,则结果为null ),然后使用普通的nodes()query()value()来处理它XML 方法如下...

create table dbo.Records (
  OneField varchar(max)
);
insert dbo.Records (OneField) values
  ('<category domain="category" nicename="featured">Featured</category>
<category domain="post_tag" nicename="name1">Name 1</category>
<category domain="post_tag" nicename="name-2">Name 2</category>
<category domain="post_tag" nicename="different-name">Different Name</category>
<category domain="type" nicename="something-else">Something Else</category>');

select
  Category.value('@domain', 'varchar(50)') as [Domain],
  Category.value('@nicename', 'varchar(50)') as [NiceName],
  Category.value('(text())[1]', 'varchar(50)') as [Contents]
from dbo.Records R
cross apply (select try_cast(OneField as XML)) X(OneFieldXML)
cross apply OneFieldXML.nodes('/category') N(Category);
领域 好名字 内容
类别 精选 精选
post_tag 姓名1 姓名 1
post_tag 名字-2 姓名 2
post_tag 异名 不同的名字
类型 别的东西 别的东西

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM