これはNokogiriのドキュメントとStack OfflowのNokogiriについての多くの回答の両方でカバーされています。
NodeSetドキュメントは言う:
inner_text⇒オブジェクトは、別名:テキスト
Nodeのドキュメントが言うのに対し、すべて含まれているノードの内部テキストが
オブジェクト取得:
コンテンツ⇒オブジェクト(#text、#inner_text)
このノードの内容を返します。
あなたはこの動作を確認することができます
require 'nokogiri'
doc = Nokogiri::XML(<<EOT)
<foo>my dog <bar>has</bar> <bar>fleas</bar> he gave <bar>to me</bar></foo>
EOT
doc.at('foo').text # => "my dog has fleas he gave to me"
doc.at('foo').children.map(&:text) # => ["my dog ", "has", " ", "fleas", " he gave ", "to me"]
は、空の文字列" "
に注意してください。私たち人間はXMLで、そのことは何も考えると、それはまだテキストノードなのでchildren
を歩くときに現れるHTMLたい一方でそれは、テキストノードいるので、
</bar> <bar>
の間のスペースの結果であり、まだ子供です。通常、これを避けるためにはより厳密なセレクタが使用されますが、この場合、他の文字列にも余分なスペースがあるため、これを行う良い方法はありません。
doc.at('foo').children.map { |node| node.text.strip }
# => ["my dog", "has", "", "fleas", "he gave", "to me"]
か:次に
doc.at('foo').children.map { |node| node.text.strip }.reject { |node| node.empty? }
# => ["my dog", "has", "fleas", "he gave", "to me"]
でjoin(' ')
結果を使用して:
doc.at('foo').children.map { |node| node.text.strip }.join(' ')
# => "my dog has fleas he gave to me"
か:限り
doc.at('foo').children.map { |node| node.text.strip }.reject { |node| node.empty? }.join(' ')
# => "my dog has fleas he gave to me"
私はおそらく代わりに、このような何かをしたいですが何であるかを知っている:
doc.root # => #<Nokogiri::XML::Element:0x3fecdc8a2434 name="foo" children=[#<Nokogiri::XML::Text:0x3fecdc8a7984 "my dog ">, #<Nokogiri::XML::Element:0x3fecdc8a795c name="bar" children=[#<Nokogiri::XML::Text:0x3fecdc8a72a4 "has">]>, #<Nokogiri::XML::Text:0x3fecdc8a7934 " ">, #<Nokogiri::XML::Element:0x3fecdc8a790c name="bar" children=[#<Nokogiri::XML::Text:0x3fecdc8a6e94 "fleas">]>, #<Nokogiri::XML::Text:0x3fecdc8a78e4 " he gave ">, #<Nokogiri::XML::Element:0x3fecdc8a78bc name="bar" children=[#<Nokogiri::XML::Text:0x3fecdc8a6a84 "to me">]>]>
doc.root.name # => "foo"
"[ask]"とリンク先ページ、 "[mcve]"をお読みください。あなたの質問はうまくいきません。あなたは私たちに少しXMLを与えて、あなたが試したことは何も表示しません:あなたは、問題を目的の出力と共に示す最小限のコード例が必要です。私は閉会には投票しませんが、私たちがあなたを助け、同様の解決策を探している他の人を助けるために、将来的にこれらのことをしてください。 –