Microsoft SQL Server。我有一个xml:
<script type="text/javascript">
window.setTimeout(function(){ document.location.reload(true); }, 30000);
</script>
我应该使用什么样的select方法来提取行中的结果获取值,例如:
<div class="list">
<ul>
<li class="nr">5859. </li>
<li class="task">task</li>
<li class="var">Norman</li>
<li class="var">Dave</li>
</ul>
答案 0 :(得分:1)
你说:我有一个xml:
否!你还没有!你有HTML!
许多人认为,它们是相同的,至少它们看起来如此相似,但HTML 不是 XML。在您的示例中,缺少结束<div>
- 标记将破坏任何基于XML的方法...
仅使用列表定义,您可以使用XML方法:
DECLARE @Xml XMl=
'<ul>
<li class="nr">5859. </li>
<li class="task">task</li>
<li class="var">Norman</li>
<li class="var">Dave</li>
</ul>'
SELECT li.value('@class','nvarchar(max)') AS NodeClass
,li.value('.','nvarchar(max)') AS NodeValue
FROM @xml.nodes('/ul/li') AS A(li)
但我真的强烈建议不要用SQL-Server解析HTML ......
如果你可以确定,那么给定的HTML 是XHTML ,就会有所不同。 XHTML是HTML,严格遵守XML标准。在这种情况下,只有在这种情况下!,这是一个很好的方法......
两个问题:
<li>
元素(如果计数和命名可能不同)试试这个
DECLARE @xml XML=
N'<div class="list">
<ul>
<li class="nr">5859. </li>
<li class="task">task</li>
<li class="var">Norman</li>
<li class="var">Dave</li>
</ul>
</div>';
SELECT li.value('@class','nvarchar(max)') AS NodeClass
,li.value('.','nvarchar(max)') AS NodeValue
FROM @xml.nodes('/div/ul/li') AS A(li)
SELECT ul.value('(li[@class="nr"])[1]','nvarchar(max)') AS nr
,ul.value('(li[@class="task"])[1]','nvarchar(max)') AS task
,ul.value('(li[@class="var"])[1]','nvarchar(max)') AS var1
,ul.value('(li[@class="var"])[2]','nvarchar(max)') AS var2
FROM @xml.nodes('/div/ul') AS A(ul)