2014-05-14 67 views
2

我試圖將標記化的字符串(英文句子)轉換爲HTML span標記以HTML顯示。如何通過Nokogiri訪問沒有名稱的文本

這裏是我試圖執行

  1. 取其中包含空格的標記化字符串的基本步驟
  2. <root></root>括起來,使之成爲有效的XML
  3. 創建一個引入nokogiri對象訪問xml
  4. 能夠遍歷「element_children」節點集來訪問名稱和文本,並使用它來將令牌轉換爲<span class=token>
  5. 但是,無法訪問存在於nokogiri對象中的#(Text " ")(pry中的第7步)
  6. 因此,當我嘗試將這些元素添加到數組 後面我將加入創建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>" 
+1

能否請您移動撬會議的有關內容納入這個問題嗎?鏈接到代碼會使問題更難理解,並且可能不會像Stack Overflow上的問題本身一樣。 –

回答

3

您應該使用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>" 
+0

Uri Agassi先生,非常感謝。工作。感謝你的幫助。 – Anand

相關問題