如何将XML排序列表解析为表视图



如何像这样解析XML有序列表

<ol>
<li>value1</li>
<li>value2</li>
<li>value3</li>
</ol>

进入这样的表格(就像它在html中可见(:

Nr          Value
----------- ------
1           value1
2           value2
3           value3

以下是XML字符串的代码:

declare @ol XML= '<ol><li>'+REPLACE('value1,value2,value3', ',', '</li><li>')+'</li></ol>' 
select  @ol

注意是否可以在不创建类似identity列的内容的情况下从XML中解析"编号"?

小更新:以下解决方案为上述简单示例提供了正确答案:

  1. 伊扎克·哈宾斯基,萨勒曼A
  2. 阿赫莱什·辛格

但是有可能为这个更棘手的例子找到解决方案吗:

DECLARE @ol XML 
SET @ol= 
'<ol type="i" start="3">
<li>value1</li>
<li>value2</li>
<li>value3</li>
</ol>';

估计结果:

Nr   Value
---- -------
iii  value1
iv   value2
v    value3

找到节点很容易,找到它们的相对位置很棘手。以下是通过<<运算符和count函数使用节点比较操作的一个解决方案:

DECLARE @ol XML = '<ol>
<li>value1</li>
<li>value2</li>
<li>value3</li>
</ol>';
SELECT li.value('.', 'NVARCHAR(100)') AS value
, li.value('let $n := . return count(../*[. << $n]) + 1', 'int') AS pos
FROM @ol.nodes('/ol/li') AS x(li)
DECLARE @ol XML 
SET @ol= '<ol>
<li>value1</li>
<li>value2</li>
<li>value3</li>
</ol>';
SELECT  ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS Nr,
li.value('.', 'NVARCHAR(100)') AS Value
FROM @ol.nodes('/ol/li') AS x(li)

尝试此简单查询。。。在这里正在获取行号((。。。所以我们得到Nr作为数字。。。1,2,3..依此类推…并将xml值放入表…中。。。。

您将获得这种类型的输出。。。

输出:

Nr          Value
----------- ------
1           value1
2           value2
3           value3

编辑问题后。。。解决方案应该是这样的。。。。。

DECLARE @ol XML 
SET @ol= 
'<ol type="i" start="3">
<li>value1</li>
<li>value2</li>
<li>value3</li>
</ol>';
SELECT 2 + ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS Nr,
li.value('.', 'NVARCHAR(100)') AS Value
FROM @ol.nodes('/ol/li') AS x(li)

输出:

Nr          Value
----------- ------
3           value1
4           value2
5           value3

这里将+2值添加到RowNumber((中,这样……我们就可以得到值2,3,4…等等。

最新更新