[英]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.