0

我有一些 JSON 格式的数据已转换为 xml,因此我可以将其传递给我的 mssql sproc(因此看起来很有趣 xml)。

现在我想选择一个包含 2 列的结果集,一个带有标签名称(在本例中为 3018 或 3017),另一列带有值,每个节点都有一行,但节点数是动态的。

这种不寻常格式的原因是因为我的大部分程序使用 JSON,而这小部分使用 xml,我可以使用 jsonconvert.deserializexmlnode 方法进行相当干净的转换。

伪代码如下:

由于我正在为此苦苦挣扎,因此将不胜感激任何帮助使其发挥作用。

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)
4

1 回答 1

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演示

于 2013-06-03T05:14:25.090 回答