我正在尝试将标记化字符串(英语句子)转换为 HTML span 标记以在 HTML 中显示。
这是我尝试执行的基本步骤
- 获取包含空格的标记化字符串
- 用
<root></root>
括起来使其成为有效的 xml - 创建 nokogiri 对象来访问 xml
- 能够迭代“element_children”节点集以访问名称和文本,并使用它将 token 转换为
<span class=token>
- 但是,无法访问
#(Text " ")
它存在于 nokogiri 对象中(pry 中的第 7 步) - 因此,当我尝试将这些元素添加到数组中时 稍后我将加入创建 HTML,但我丢失了原始字符串中的空格。
任何有关在 nokogiri 中使用正确方法的指示都将受到高度赞赏。同样,欢迎任何其他建议。
您可以查看代码:
require 'nokogiri'
sentence_tagged = '<det>A</det> <nn>fleet</nn> <in>of</in> <nns>warships</nns><stop>.</stop>'
sentence_xml = '<root>' + sentence_tagged + '</root>'
nok_sent = Nokogiri::XML(sentence_xml)
array = []
nok_sent.root.element_children.each {|child| array << "<span class='" + child.name + "'>"
array
# => ["<span class='det'>A</span>",
# "<span class='nn'>fleet</span>",
# "<span class='in'>of</span>",
# "<span class='nns'>warships</span>",
# "<span class='stop'>.</span>"]
array.join
# => "<span class='det'>A</span><span class='nn'>fleet</span><span class='in'>of</span><span class='nns'>warships</span><span class='stop'>.</span>"
最佳答案
您应该使用children
而不是 element_children
:
array = []
nok_sent.root.children.each {|child| array << "<span class='" + child.name + "'>" +child.text+ "</span>" }
array
# => ["<span class='det'>A</span>", "<span class='text'> </span>", "<span class='nn'>fleet</span>", "<span class='text'> </span>", "<span class='in'>of</span>", "<span class='text'> </span>", "<span class='nns'>warships</span>", "<span class='stop'>.</span>"]
array.join
# => "<span class='det'>A</span><span class='text'> </span><span class='nn'>fleet</span><span class='text'> </span><span class='in'>of</span><span class='text'> </span><span class='nns'>warships</span><span class='stop'>.</span>"
关于ruby - 如何通过 Nokogiri 访问没有名称的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23656200/