首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Ruby中解析XML标记时,如何获得所有内容的总和?

在Ruby中解析XML标记时,如何获得所有内容的总和?
EN

Stack Overflow用户
提问于 2009-06-04 15:17:32
回答 2查看 186关注 0票数 1

我有一些XHTML (但实际上任何XML都可以)如下所示:

代码语言:javascript
复制
<h1>
  Hello<span class='punctuation'>,</span>
  <span class='noun'>World<span class='punctuation'>!</span>
</h1>

如何在Ruby语言中以字符串的形式获得<h1/>的完整内容?如下所示:

代码语言:javascript
复制
assert_equal "Hello, World!", h1_node.some_method_that_aggregates_all_content

做任何可扩展标记语言框架(Nokogirilibxml-ruby和c.)这类东西是内置的吗?如果不是,我觉得Y-Combinator可能是适合这项工作的工具,但我不太清楚它会是什么样子。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-06-04 15:54:48

使用Nokogiri,您只需询问节点的text即可。但是,我发现这样做的问题是,该节点中的所有空格和换行符都将被返回,因此您可能希望去掉这些空格和换行符(这可能是一种比我在本例中所做的更好的方法)。

下面是一个示例:

代码语言:javascript
复制
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
票数 3
EN

Stack Overflow用户

发布于 2009-06-04 15:58:18

诺基里的Nokogiri::XML::Node#content将做到这一点:

代码语言:javascript
复制
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"
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/951220

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档