我有一些JSON格式的数据,我已经转换为xml,所以我可以将它传递给我的mssql sproc(因此看起来很滑稽的xml)。
现在我想要选择一个包含2列的结果集,一个带有标签名称(在本例中为3018或3017),另一列带有值,每个节点都有一行,但会有一个动态数字节点。
这种不寻常格式的原因是因为我的大多数程序都使用JSON,而这个小部分使用xml,我可以使用jsonconvert.deserializexmlnode方法进行相当干净的转换。
Psuedo代码如下:
任何有助于此工作的帮助都会非常感激,因为我正在努力解决这个问题。
DECLARE @xml XML =
'<root>
<3018>1</3018>
<3017>2</3017>
</root>'
select T.N.value(valueoftag, 'int')
select T.N.value(tagname, int)
from @XML.nodes('/root') as T(N)
答案 0 :(得分:1)
您的xml片段不是有效的XML。标记名称不能以数字或标点符号开头。
现在,如果你有像这样的xml片段
DECLARE @xml XML =
'<root>
<_3018>1</_3018>
<_3017>2</_3017>
</root>'
然后,您可以使用查询获取名称和值
SELECT
CAST(REPLACE(N.value('local-name(.)', 'VARCHAR(12)'), '_', '') AS INT) tagname,
N.value('(.)[1]', 'INT') tagvalue
FROM @xml.nodes('/root/*') as T(N)
输出:
| TAGNAME | TAGVALUE |
----------------------
| 3018 | 1 |
| 3017 | 2 |
这是 SQLFiddle 演示