1

我在我的网站中使用降价,我想对新闻文章做一些简单的解析。

如何解析降价以提取所有块引用和链接,以便我可以将它们与文档的其余部分分开突出显示

例如,我想解析文档中的第一个块引用 (>),以便无论它出现在文档中的哪个位置,我都可以将它推到顶部。(类似于许多新闻网站所做的,突出文章的某些部分。)但然后为正文取消引用。所以它出现了两次(一次总是在顶部突出显示,然后通常出现在文档中)。

4

2 回答 2

2

我会假设您正在尝试在渲染时执行此操作,此时降价将被转换为 HTML。为了为您指明正确的方向,您可以采取的一种方法是

  1. 将 Markdown 转换为 HTML
  2. 将 HTML 传递给 Nokogiri
  3. 抓取第一个<blockquote>,复制,注入到Nokogiri节点树的顶部

结果将是第一个的副本<blockquote>

Redcarpet 2是将 Markdown 转换为 HTML 的绝佳工具。Nokogiri是您进行 HTML 解析的最佳选择。

如有必要,我可以编写示例代码,但是这两个 gem 的文档都很详尽,而且这项任务很简单,只需将文档中示例中的部分拼凑起来。这至少回答了你如何去做的问题。

编辑

根据需要,这也可以使用一行 jQuery 来完成。

$('article').prepend($($('article blockquote').get(0)).clone())

给定<article>页面上一篇文章的 DOM 元素,获取第一个<blockquote>,克隆它,并将其添加到<article>.

于 2012-08-11T18:06:36.367 回答
1

我知道 wiki 标记(即ruby​​ 的wikicloth)具有与您在解析链接、类别和引用方面类似的实现。虽然我不确定块引号,但它可能更适合。

就像是:

data = "[[ this ]] is a [[ link ]] and another [http://www.google.com Google].  This is a <ref>reference</ref>, but this is a [[Category:Test]].  This is in another [[de:Sprache]]"

wiki = WikiCloth::Parser.new(:data => data)
wiki.to_html

puts "Internal Links: #{wiki.internal_links.size}"
puts "External Links: #{wiki.external_links.size}"
puts "References:     #{wiki.references.size}"
puts "Categories:     #{wiki.categories.size} [#{wiki.categories.join(",")}]"
puts "Languages:      #{wiki.languages.size} [#{wiki.languages.keys.join(",")}]"

我还没有看到任何可用于降价的解析器。使用 redcarpet,转换为 HTML,然后使用 Nokogiri 似乎有点复杂。

于 2012-08-12T12:13:26.800 回答