मैं नोकोगिरी के साथ खाली टैग कैसे बंद कर सकता हूं? - रूबी, एक्सएमएल, नोकोगिरी

मैंने ईआरबी में एक एक्सएमएल टेम्पलेट बनाया है। मैं निर्यात प्रक्रिया के दौरान डेटाबेस से डेटा के साथ भरता हूं।

कुछ मामलों में, एक शून्य मूल्य होता है, जिस स्थिति में एक तत्व खाली हो सकता है, इस तरह:

<someitem>

</someitem>

उस स्थिति में, निर्यात प्राप्त करने वाला ग्राहक चाहता है कि इसे एक स्व-समापन टैग में परिवर्तित किया जाए:

<someitem/>

मैं यह देखने की कोशिश कर रहा हूं कि यह करने के लिए नोकोगिरी कैसे प्राप्त करें, लेकिन मैं इसे अभी तक नहीं देख रहा हूं। क्या कोई जानता है कि खाली एक्सएमएल टैग कैसे नोकोगिरी के साथ स्वयं बंद कर रहे हैं?

अद्यतन करें

एक रेगेक्स जो मैंने ऊपर निर्दिष्ट किया है, वह करने के लिए पर्याप्त था, लेकिन ग्राहक अब भी टैग चाहता है जिनके बच्चे स्वयं को बंद करने के लिए खाली हैं। तो यह:

<someitem>
<subitem>

</subitem>
<subitem>

</subitem>
</someitem>

... भी होना चाहिए

<someitem/>

मुझे लगता है कि इसे नोकोगिरी का उपयोग करने की आवश्यकता होगी।

उत्तर:

जवाब के लिए 5 № 1

निम्न को खोजें

<([^>]+)>s*</1>

और के साथ प्रतिस्थापित करें

<1/>

रुबी में:

result = subject.gsub(/<([^>]+)>s*</1>/, "<1/>")

स्पष्टीकरण:

<       # Match opening bracket
(       # Match and remember...
[^>]+  # One or more characters except >
)       # End of capturing group
>       # Match closing bracket
s*     # Match optional whitespace & newlines
<       # Match opening bracket
/       # Match /
1      # Match the contents of the opening tag
>       # Match closing bracket

उत्तर № 2 के लिए 1

कुछ सवाल:

  1. <foo></foo> के समान है <foo />, तो इतनी छोटी जानकारी के बारे में चिंता क्यों करें? यदि यह वाक्य रचनात्मक रूप से महत्वपूर्ण है क्योंकि दोनों के बीच पाठ नोड एक है "n", फिर अपने ईआरबी टेम्पलेट में एक परीक्षण डालें जो उस मूल्य के लिए जांचता है जो वहां जायेगा, और यदि इसके बजाय आउटपुट को स्वयं बंद टैग को प्रारंभ नहीं किया गया है? "याक शेविंग"।
  2. नोकोगिरी क्यों शामिल है? आप ईआरबी में सही एक्सएमएल उत्पन्न करने में सक्षम होना चाहिए क्योंकि आप "टेम्पलेट के नियंत्रण में हैं।

संपादित करें - नोकोगिरी का व्यवहार फिर से लिखना नहीं हैपार्स किए गए एक्सएमएल को जब तक यह करना है। मुझे संदेह है कि "आपको प्रश्न में नोड को हटाना है, फिर उसे नोकोगिरी को जो भी आप चाहते हैं उसे आउटपुट करने के लिए इसे खाली नोड के रूप में दोबारा डालें।


संबंधित सवाल
सबसे लोकप्रिय