【问题标题】:How to retrieve a HTML tag from a column如何从列中检索 HTML 标记
【发布时间】: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" alt="Helsinki, John Photo" /></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 来做这件事,你用的是哪个数据库产品?

标签: html asp.net sql xml


【解决方案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" alt="Helsinki, John Photo" /></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" alt="Helsinki, John Photo" /></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...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-04
  • 1970-01-01
  • 2019-03-09
  • 1970-01-01
相关资源
最近更新 更多