0
我有一个包含文本'The f'
一个节点:如何使用Nokogiri获取包含文本的当前节点之前的第一个节点?
<w:r w:rsidR="00BC78BF">
<w:t>e takes out his phone and calls a friend.</w:t>
</w:r>
<w:r w:rsidR="00CB49B6">
<w:t xml:space="preserve"/>
</w:r>
<w:ins w:author="Mitchell Gould" w:date="2016-11-14T14:23:00Z" w:id="8">
<w:r w:rsidR="00BC7F15">
<w:t>The f</w:t>
</w:r>
</w:ins>
我想要得到的文本中第一次出现这种文本节点之前存在。
我尝试使用:
node.previous_element.text
=> " "
和
previous_node = node.xpath('preceding-sibling::w:r').last
=> " "
这是因为有时previous_element
只是如上所示的空间,并且可能的是,可能有许多这些元素的那只是空间。
我怎样才能得到包含文本的第一个兄弟姐妹?
require 'nokogiri'
doc = Nokogiri::XML(<<EOT)
<xml>
<r>
<t>e takes out his phone and calls a friend.</t>
</r>
<r>
<t/>
</r>
<ins>
<r>
<t>The f</t>
</r>
</ins>
</xml>
EOT
doc.search('//text()').map { |t| t.text.strip }.reject(&:empty?)
# => ["e takes out his phone and calls a friend.", "The f"]
然后它变成识别元素之前"The f"
一个问题,我会离开为你一个任务:
你期望得到什么? “e拿出他的电话,给朋友打电话。”?你在Code_中尝试过什么? – mudasobwa
我更新了我的问题以显示我所尝试的内容。是的,我希望得到“”e取出他的电话,并打电话给朋友。“ – chell
获取'w:t'节点的集合并向后迭代一次以获取_previous'w:t' element_。递归'previous_element',除非它的'text'属性不为空 – mudasobwa