如何从列中检索 HTML 标记
Posted
技术标签:
【中文标题】如何从列中检索 HTML 标记【英文标题】:How to retrieve a HTML tag from a column 【发布时间】:2014-06-30 01:27:11 【问题描述】:我有一个 SQL 表,其中有一列包含一些 html/XML 标记。这是一个例子:
<root><Physicians><name>John Helsinki, MD</name>
<picture><img src="/uploadedImages/svr/physicians/images/John web.jpg?n=9059" /></picture>
<gender>M</gender>
<specialty><a href="/WA/test.aspx?56" title="Eye Care">OPT</a></specialty>
<specialty2></specialty2>
<specialty3></specialty3>
<additional_specialty></additional_specialty>
</Physicians>
</root>
如何提取位于<picture></picture>
之间的<img>
标记?
我知道我可以在 SQL 中使用 LIKE
关键字,但我不确定如何继续...
【问题讨论】:
如果你想用 SQL 来做这件事,你用的是哪个数据库产品? 【参考方案1】:您可以使用 XPath 来利用列类型 - XML
declare @thing XML
set @thing = '<root><Physicians><name>John Helsinki, MD</name>
<picture><img src="/uploadedImages/svr/physicians/images/John web.jpg?n=9059" /></picture>
<gender>M</gender>
<specialty><a href="/WA/test.aspx?56" title="Eye Care">OPT</a></specialty>
<specialty2></specialty2>
<specialty3></specialty3>
<additional_specialty></additional_specialty>
</Physicians>
</root>'
SELECT @thing.query('/root/Physicians/picture/img')
另一种通过表格完成的方法:
DECLARE @XmlTable TABLE (ID INT NOT NULL, XmlData XML)
INSERT INTO @XmlTable
(ID, XmlData)
VALUES
(1, '<root><Physicians><name>John Helsinki, MD</name>
<picture><img src="/uploadedImages/svr/physicians/images/John web.jpg?n=9059" /></picture>
<gender>M</gender>
<specialty><a href="/WA/test.aspx?56" title="Eye Care">OPT</a></specialty>
<specialty2></specialty2>
<specialty3></specialty3>
<additional_specialty></additional_specialty>
</Physicians>
</root>')
select XmlData.query('/root/Physicians/picture/img') from @XmlTable
这利用了任何 XML 变量类型上可用的query method,因此在此上下文中:
select [column].query('/root/Physicians/picture/img') from [table]
【讨论】:
@thing
是动态的,永远不会针对同一个人。
效果很好。我可以插入一个 SELECT 语句来获取 @thing 而不是硬编码字符串值吗?
该列会不断变化,因此很难对其进行编码,不幸的是,即使在表格中也不适合我。我正在尝试这样的事情:set @thing = (SELECT [column] FROM [database].[dbo].[table])
但它给了我一个错误。
我有这样的:declare @thing XML set @thing = SELECT [content_html].query('/root/Physicians/picture/img') from [Database].[dbo].[table] SELECT @thing.query('/root/Physicians/picture/img')
但我收到一个错误:Incorrect syntax near the keyword 'SELECT'.
@SiKni8 创建一个新表并将列设置为 NVARCHAR(MAX),然后将 xml 数据导入到新表中。然后你做一个演员 - SELECT CAST(newNvarcharColumn AS XML) 这意味着你可以更新一个新创建的 XML 列,或者你可以说 CAST(newNvarcharColumn AS XML).query('etc...以上是关于如何从列中检索 HTML 标记的主要内容,如果未能解决你的问题,请参考以下文章