我在我的网站中使用降价,我想对新闻文章做一些简单的解析。
如何解析降价以提取所有块引用和链接,以便我可以将它们与文档的其余部分分开突出显示
例如,我想解析文档中的第一个块引用 (>),以便无论它出现在文档中的哪个位置,我都可以将它推到顶部。(类似于许多新闻网站所做的,突出文章的某些部分。)但然后为正文取消引用。所以它出现了两次(一次总是在顶部突出显示,然后通常出现在文档中)。
我在我的网站中使用降价,我想对新闻文章做一些简单的解析。
如何解析降价以提取所有块引用和链接,以便我可以将它们与文档的其余部分分开突出显示
例如,我想解析文档中的第一个块引用 (>),以便无论它出现在文档中的哪个位置,我都可以将它推到顶部。(类似于许多新闻网站所做的,突出文章的某些部分。)但然后为正文取消引用。所以它出现了两次(一次总是在顶部突出显示,然后通常出现在文档中)。
我会假设您正在尝试在渲染时执行此操作,此时降价将被转换为 HTML。为了为您指明正确的方向,您可以采取的一种方法是
<blockquote>
,复制,注入到Nokogiri节点树的顶部结果将是第一个的副本<blockquote>
。
Redcarpet 2是将 Markdown 转换为 HTML 的绝佳工具。Nokogiri是您进行 HTML 解析的最佳选择。
如有必要,我可以编写示例代码,但是这两个 gem 的文档都很详尽,而且这项任务很简单,只需将文档中示例中的部分拼凑起来。这至少回答了你如何去做的问题。
编辑
根据需要,这也可以使用一行 jQuery 来完成。
$('article').prepend($($('article blockquote').get(0)).clone())
给定<article>
页面上一篇文章的 DOM 元素,获取第一个<blockquote>
,克隆它,并将其添加到<article>
.
我知道 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 似乎有点复杂。