2015-04-14 68 views
1

目前我刪除幕節點形成使用文檔:在Nokogiri XML中註釋掉一個節點?

doc.search('//xpathExpression').each do |node| 
    node.remove 
end 

可是,我真的需要註釋掉的節點,而不是將其刪除。有沒有簡單的方法來改變當前節點的節點類型/註釋?

+0

'doc.xpath('// xpathExpression')。each do | node | node.add_previous_sibling(Nokogiri :: XML :: Comment.new(doc,「\ n#{node.to_s} \ n \ t」)) node.remove end' – user3115274

+0

如果評論是答案,則創建與此相關的答案。 SO將有一個超時期限,但是你可以選擇那個作爲答案。不要將代碼放在評論中,因爲它很難閱讀。 –

回答

0

要給出應有的分數,這是上面評論中原始用戶建議的方法。


執行以下操作註釋掉基於XPath的給定一個或多個節點:

  1. 使用.xpath方法來找到目標節點。
  2. 將預先調用的每個節點添加一個轉換爲註釋對象內部字符串的節點的副本。
  3. 刪除原始節點。

例如,給定:

#!/usr/bin/env ruby 

require "nokogiri" 

xml = %{ 
<top> 
    <child num="1"/> 
    <child num="2"/> 
</top> 
} 

doc = Nokogiri::XML(xml) 

該代碼將根據num="2"屬性註釋掉第二<child>

doc.xpath("//top/child[@num='2']").each do |node| 
    node.add_previous_sibling(Nokogiri::XML::Comment.new(doc, " #{node.to_s} ")) 
    node.remove 
end 

這個過程之後,doc.to_xml將是:

<?xml version="1.0"?> 
<top> 
    <child num="1"/> 
    <!-- <child num="2"/> --> 
</top> 

附加信息:

  • 通過引入nokogiri產生的意見沒有<!---->之間的空白令牌和任何內容添加。上面的示例添加了前導空間和尾隨空間。如果這不是一個問題,節點可以輸出與

    Nokogiri::XML::Comment.new(doc, node.to_s) 
    
  • 似乎沒有成爲一個簡單的做一個註釋內自動美化打印。儘管可能有解決辦法,但如果您關注美學,請準備好花一些時間來處理它。