我有一些XHTML(但实际上任何XML都会这样做):
<h1>
Hello<span class='punctuation'>,</span>
<span class='noun'>World<span class='punctuation'>!</span>
</h1>
如何在Ruby中将<h1/>
的完整内容作为字符串获取?如:
assert_equal "Hello, World!", h1_node.some_method_that_aggregates_all_content
任何XML框架(Nokogiri,libxml-ruby和&amp; c。)都内置了这种东西吗?如果没有,我觉得Y-Combinator可能是适合这项工作的合适工具,但我无法弄清楚它会是什么样子。
答案 0 :(得分: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
答案 1 :(得分: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"