如何从列中检索 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>

如何提取位于&lt;picture&gt;&lt;/picture&gt; 之间的&lt;img&gt; 标记?

我知道我可以在 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 标记的主要内容,如果未能解决你的问题,请参考以下文章

检索 Html 标记 C# 的内部文本

使用SQL C#从列名为User Id的每一行检索单元格值

SQL 查询:如何通过自己列中的“任何”检索结果?

如何使用 C 的 DB 库从 SQL Server 列中检索大值?

如何使用 Laravel 迁移从列中删除唯一约束?

如何从列中删除日期和月份(类型:datetime64)[重复]