2010-08-10 9 views
12

के साथ ढूंढें और बदलें, मेरे पास एक HTML है, जिसे परिवर्तित किया जाना चाहिए, कुछ टैग्स को अन्य टैग के साथ बदल दिया जाना चाहिए।संपूर्ण HTML नोड्स को नोकोगिरी

मुझे इन टैग के बारे में पता नहीं है, क्योंकि वे डीबी से आएंगे। तो, set_attribute या name नोकोगिरी के तरीके मेरे लिए उपयुक्त नहीं हैं।

मैं इस छद्म कोड में यह करने के लिए की जरूरत है, एक तरह से, जैसे:

def preprocess_content 
    doc = Nokogiri::HTML(self.content) 
    doc.css("div.to-replace").each do |div| 
    # "get_html_text" will obtain HTML from db. It can be anything, even another tags, tag groups etc. 
    div.replace self.get_html_text 
    end 
    self.content = doc.css("body").first.inner_html 
end 

मैंने पाया Nokogiri::XML::Node::replace विधि। मुझे लगता है, यह सही दिशा है।

यह विधि कुछ node_or_tags पैरामीटर की अपेक्षा करती है।

टेक्स्ट से नया नोड बनाने के लिए मुझे किस विधि का उपयोग करना चाहिए और इसके साथ वर्तमान को प्रतिस्थापित करना चाहिए?

उत्तर

22
कि जैसा

:

doc.css("div.to-replace").each do |div| 
    new_node = doc.create_element "span" 
    new_node.inner_html = self.get_html_text 
    div.replace new_node 
end 
+0

यह मेरे लिए काम करता है शामिल नहीं है। मैं एक गलती जेन: "अनलिंक नोड्स पर कोई प्रासंगिक पार्सिंग नहीं"। यह लाइन के लिए इस तरह से शिकायत करता है, जहां "inner_html" प्रॉपर्टी सेट है – AntonAL

+1

मैंने अभी परीक्षण किया है, और यह मेरे पर्यावरण में काम करता है। 'New_node.inner_html =' को 'new_node.content =' के साथ प्रतिस्थापित करने का प्रयास करें और त्रुटियों के लिए दोबारा जांच करें। यह होना चाहिए। –

+0

धन्यवाद, मैंने इसे समझ लिया है। समस्या थी - डीओएम को अभी तक अनलिंक तत्व को संशोधित करना। हमें पहले प्रतिस्थापित करना होगा, और फिर संशोधित करना होगा। यह अच्छा है, लेकिन मुझे एक और भ्रमित समस्या का सामना करना पड़ा - किसी भी मार्कअप को प्रतिस्थापन के रूप में नहीं डाला जा सकता है। उदाहरण के लिए, जब मैं कहता हूं "new_node.inner_html ="

Test
"- यह काम करता है, लेकिन जब मैं new_node.inner_html =" "कहता हूं, यह एक संदेश" अपरिभाषित विधि 'बच्चों के साथ दुर्घटनाग्रस्त हो जाता है 'शून्य के लिए: NilClass "... – AntonAL

संबंधित मुद्दे