我有一个xml代码,我将用于插入数据到sql server表。我想解析这个xml并插入到sql server表中。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="red_50">#FFEBEE</color>
<color name="red_100">#FFCDD2</color>
<color name="red_200">#EF9A9A</color>
<color name="red_300">#E57373</color>
<color name="red_400">#EF5350</color>
<color name="red_500">#F44336</color>
<color name="red_600">#E53935</color>
<color name="red_700">#D32F2F</color>
<color name="red_800">#C62828</color>
<color name="red_900">#B71C1C</color>
<color name="red_A100">#FF8A80</color>
<color name="red_A200">#FF5252</color>
<color name="red_A400">#FF1744</color>
<color name="red_A700">#D50000</color>
</resources>
实施例: 对于
<color name="orange_50">#FFF3E0</color>
主要问题是得到:
name:orange_50, hue:orange, value:50, hexcolor:#FFF3E0
并将所有数据保存到表格。
这就是我的尝试:
DECLARE @XML XML = '<resources>
<color name="red_600">#E53935</color>
<color name="red_700">#D32F2F</color>
<color name="red_800">#C62828</color>
<color name="red_900">#B71C1C</color>
<color name="red_A100">#FF8A80</color>
<color name="red_A200">#FF5252</color>
<color name="red_A400">#FF1744</color>
<color name="red_A700">#D50000</color>
</resources>
'
SELECT NAME = Events.value('@name', 'varchar(25)')
FROM @XML.nodes('ressources/color') AS XTbl(Events)
我尝试获取颜色名称并且工作正常但是为了得到十六进制我不知道怎么做。我想在red_800中提取,例如,红色仅用于色调列,800用于值列。 感谢
答案 0 :(得分:0)
这是一种可能的方式:
SELECT
NAME = Events.value('@name', 'varchar(25)')
,HUE = SUBSTRING(Events.value('@name', 'varchar(25)'), 1, CHARINDEX('_', Events.value('@name', 'varchar(25)'))-1)
,VALUE = SUBSTRING(Events.value('@name', 'varchar(25)'), CHARINDEX('_', Events.value('@name', 'varchar(25)')) + 1, LEN(Events.value('@name', 'varchar(25)')))
,HEXCOLOR = Events.value('.', 'varchar(25)')
FROM @XML.nodes('/resources/color') AS XTbl(Events)
<强> Sqlfiddle Demo
强>
输出
| NAME | HUE | VALUE | HEXCOLOR |
|----------|-----|-------|----------|
| red_600 | red | 600 | #E53935 |
| red_700 | red | 700 | #D32F2F |
| red_800 | red | 800 | #C62828 |
| red_900 | red | 900 | #B71C1C |
| red_A100 | red | A100 | #FF8A80 |
| red_A200 | red | A200 | #FF5252 |
| red_A400 | red | A400 | #FF1744 |
| red_A700 | red | A700 | #D50000 |
相关讨论: T-SQL get substring after specific character? *
*)此处使用相同的技巧获取位于name
_
之后的VALUE
属性值以及_
HUE
之前的client_secret
属性值的一部分}列