1

我有一些这样的 XHTML(但实际上任何 XML 都可以):

<h1>
  Hello<span class='punctuation'>,</span>
  <span class='noun'>World<span class='punctuation'>!</span>
</h1>

如何<h1/>在 Ruby 中获取 as a String 的全部内容?如:

assert_equal "Hello, World!", h1_node.some_method_that_aggregates_all_content

是否有任何 XML 框架(Nokogirilibxml-ruby等)内置了这种东西?如果不是,我觉得 Y-Combinator 可能是适合这项工作的工具,但我不太清楚它会是什么样子。

4

2 回答 2

3

使用 Nokogiri,您只需请求text一个节点。我在这样做时看到的问题是,该节点中的所有空格和换行符都将被返回,因此您可能希望将它们删除(可能比我为这个示例所做的更好的方法)。

这是一个示例:

def test_nokogiri_text
  value = Nokogiri::HTML.parse(<<-HTML_END)
    "<h1>
      Hello<span class='punctuation'>,</span>
      <span class='noun'>World<span class='punctuation'>!</span>
     </h1>"
  HTML_END

  h1_node = value.search("h1").first
  assert_equal("Hello, World!", h1_node.text.split(/\s+/).join(' ').strip)
end
于 2009-06-04T15:54:48.167 回答
2

Nokogiri 的Nokogiri::XML::Node#content会这样做:

irb(main):020:0> node
=> <h1>
  Hello<span class="punctuation">,</span>
  <span class="noun">World<span class="punctuation">!</span>
</span>
</h1>
irb(main):021:0> node.content
=> "\n  Hello,\n  World!\n\n"
于 2009-06-04T15:58:17.790 回答