【问题标题】:How can I extract text from HTML in a MySQL column?如何从 MySQL 列中的 HTML 中提取文本?
【发布时间】:2022-02-04 00:38:41
【问题描述】:

我们有一些表单数据从我们的 CMS 流入我们的 CRM。 CRM 中捕获的数据包含这样的 HTML 元素。

<dl><dt>First Name:</dt><dd>Joe</dd>
<dt>Last Name:</dt><dd>Blogs</dd>  
<dt>Personal Email:</dt>
<dd>joe.bloggs@exampleEmail.com</dd>  
<dt>Most recent job title:</dt>
<dd>Manager</dd>  
<dt> Level of membership you are applying for:</dt>
<dd>Full Member</dd>

我玩过子字符串,但只能得到名字。较短的名称与下一个字符串或较长的名称需要更多的字符长度。

substring(fieldname, 29, 15) as FirstName,

结果

  1. 乔(太长了)
  2. Anne-Mar(太短)

在特定文本之间是否有其他捕捉方式或方式?

【问题讨论】:

  • 这能回答你的问题吗? Remove HTML tags from record
  • 谢谢 - 不想删除标签本身只需要将每个问题和答案放在单独的列中。
  • 这是可行的,但当你通过第二场时,它会变得非常复杂。
  • 我找到了另一种方法,但它只工作了一半 substring_index(substring_index(content, 'First Name:
    ', -1),'
    Last Name :
    ', 1) 正确显示了名字的起始位置,但整个条目紧随其后。如果我选择稍后的问题,结果相同。
  • MySQL 不是进行 HTML 解析的地方。将数据读入您使用的任何语言,然后使用 HTML 解析器解析 HTML。你不想弄乱子字符串。从 HTML 中提取文本是一个已解决的问题。不要重新发明轮子。

标签: html mysql sql substring html-parsing


【解决方案1】:

正如 cmets 中所述,您最好在数据库以外的几乎任何级别执行此操作,但我一直在使用 SQLFiddle 并以此为起点。 我对您的原始示例所做的唯一一件事就是将 /dl 标记添加到末尾,以使其格式良好的 xml。我对 MySQL 处理得如此出色感到惊喜。

set @xml = '<dl><dt>First Name:</dt><dd>Joe</dd>
<dt>Last Name:</dt><dd>Blogs</dd>  
<dt>Personal Email:</dt>
<dd>joe.bloggs@exampleEmail.com</dd>  
<dt>Most recent job title:</dt>
<dd>Manager</dd>  
<dt> Level of membership you are applying for:</dt>
<dd>Full Member</dd></dl>';

select ExtractValue(@xml, '//dt[1]') as question, ExtractValue(@xml, '//dd[1]') as answer
  union
select ExtractValue(@xml, '//dt[2]') as question, ExtractValue(@xml, '//dd[2]') as answer
  union
select ExtractValue(@xml, '//dt[3]') as question, ExtractValue(@xml, '//dd[3]') as answer
  union
select ExtractValue(@xml, '//dt[4]') as question, ExtractValue(@xml, '//dd[4]') as answer;

结果

question answer
First Name: Joe
Last Name: Blogs
Personal Email: joe.bloggs@exampleEmail.com
Most recent job title: Manager

(这绝对是一个起点。我不是 MySQL 专家,而且我对发帖很陌生,所以请随时改进。)

【讨论】:

    猜你喜欢
    • 2011-08-16
    • 2011-01-07
    • 1970-01-01
    • 2016-02-07
    • 1970-01-01
    • 2010-11-12
    • 2011-04-27
    • 1970-01-01
    相关资源
    最近更新 更多