簡體   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