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