[英]Converting XML node values to comma separated values in SQL
我正在嘗試將 XML 節點值轉換為逗號分隔值,但是得到了
關鍵字“SELECT”附近的語法不正確。 錯誤信息
declare @dataCodes XML = '<Root>
<List Value="120" />
<List Value="110" />
</Root>';
DECLARE @ConcatString VARCHAR(MAX)
SELECT @ConcatString = COALESCE(@ConcatString + ', ', '') + Code FROM (SELECT T.Item.value('@Value[1]','VARCHAR(MAX)') as Code FROM @dataCodes.nodes('/Root/List') AS T(Item))
SELECT @ConcatString AS Result
GO
我試圖關注一篇文章,但不確定如何繼續。 任何建議表示贊賞。
期待:
逗號分隔值 ('120,110') 存儲在變量中。
嘗試這個;
DECLARE @dataCodes XML = '<Root>
<List Value="120" />
<List Value="110" />
</Root>';
DECLARE @ConcatString VARCHAR(MAX)
SELECT @ConcatString = COALESCE(@ConcatString + ', ', '') + Code
FROM (
SELECT T.Item.value('@Value[1]', 'VARCHAR(MAX)') AS Code
FROM @dataCodes.nodes('/Root/List') AS T(Item)
) as TBL
SELECT @ConcatString AS Result
GO
您只需要向您的子SQL查詢添加別名。
對於將來的讀者,可以使用通用語言將XML數據提取到數組,列表,向量和變量中,以逗號分隔的值輸出,更加流暢。 以下是利用OP的需求利用XPath
的開源解決方案。
蟒蛇
import lxml.etree as ET
xml = '<Root>\
<List Value="120" />\
<List Value="110" />\
</Root>'
dom = ET.fromstring(xml)
nodes = dom.xpath('//List/@Value')
data = [] # LIST
for elem in nodes:
data.append(elem)
print((", ").join(data))
120, 110
PHP
$xml = '<Root>
<List Value="120" />
<List Value="110" />
</Root>';
$dom = simplexml_load_string($xml);
$node = $dom->xpath('//List/@Value');
$data = []; # Array
foreach ($node as $n){
$data[] = $n;
}
echo implode(", ", $data);
120, 110
[R
library(XML)
xml = '<Root>
<List Value="120" />
<List Value="110" />
</Root>'
doc<-xmlInternalTreeParse(xml)
data <- xpathSApply(doc, "//List", xmlGetAttr, 'Value') # LIST
print(paste(data, collapse = ', '))
120, 110
要在沒有變量的情況下執行此操作,您可以使用nodes
方法將 xml 節點轉換為帶有前導逗號的表格格式,然后使用FOR XML PATH('')
將其折疊為一行 XML,然后將其包裝在STUFF
中將其轉換為 varchar 並去掉開頭的前導逗號:
DECLARE @dataCodes XML = '<Root>
<List Value="120" />
<List Value="110" />
</Root>';
SELECT STUFF(
(
SELECT ', ' + T.Item.value('@Value[1]', 'VARCHAR(MAX)')
FROM @dataCodes.nodes('/Root/List') AS T(Item)
FOR XML PATH('')
), 1, 2, '')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.