使用SQLServer解析XML

使用SQLServer解析XML,sql,sql-server,xml,sql-server-2008,Sql,Sql Server,Xml,Sql Server 2008,在nvarchar字段描述中,我有以下数据: <p>Hello hi and a bunch of non-xml characters &nbsp; etc...</p> <ul class='abc'> <li><img src='1.jpg' /></li> <li><img src='2.jpg' /></li> </ul> 我想查询此xml并获得以下

在nvarchar字段描述中,我有以下数据:

<p>Hello hi and a bunch of non-xml characters &nbsp; etc...</p>
<ul class='abc'>
  <li><img src='1.jpg' /></li>
  <li><img src='2.jpg' /></li>
</ul>
我想查询此xml并获得以下结果:

<img src='1.jpg' />
<img src='2.jpg' />
因此,我编写以下查询:

SELECT
    p.value('(.)[1]', 'nvarchar(100)')
FROM
(
    SELECT
        CAST(SUBSTRING(Description, CHARINDEX('<ul class=''abc''>', Description), LEN(Description)) AS XML) AS Xml
    FROM Table
        WHERE Description LIKE '%<ul class=''abc''>%'
) AS Result CROSS APPLY Xml.nodes('/ul/li') t(p)
但是我所有的结果都是空的。似乎我的XML选择器有问题。。。我做错了什么?

您需要使用查询而不是值

声明@html NVARCHARMAX=N' 你好,嗨,还有一堆非xml字符等等

' 选择 p、 查询'' 从…起 选择CASTSUBSTRING@html,CHARINDEX,@html,LEN@html像XML一样的XML 结果 交叉应用xml.nodes'/ul/li/img'tp 您需要使用查询而不是值

声明@html NVARCHARMAX=N' 你好,嗨,还有一堆非xml字符等等

' 选择 p、 查询'' 从…起 选择CASTSUBSTRING@html,CHARINDEX,@html,LEN@html像XML一样的XML 结果 交叉应用xml.nodes'/ul/li/img'tp