2009-09-09 27 views
28

एन्कोड करना चाहिए, मैं HTML सामग्री साझा करने के लिए XML का उपयोग कर रहा हूं।एचटीएमएल। क्या मुझे सीडीएटीए का उपयोग करना चाहिए या HTML

  • यह एन्कोडिंग: AFAIK, मैं द्वारा या तो HTML एम्बेड कर सकता है, तो यह पूरी तरह से उपयोग करने के लिए सुरक्षित है मैं नहीं जानता। और मुझे इसे फिर से डीकोड करना होगा।

  • सीडीएटीए अनुभागों का उपयोग करें: यदि सामग्री में समापन टैग "]]> और निश्चित हेक्साडेसिमल वर्ण हैं, तो मुझे अभी भी समस्याएं हो सकती हैं, मुझे विश्वास है। दूसरी ओर, एक्सएमएल पार्सर मेरे लिए पारदर्शी रूप से जानकारी निकाल देगा।

मुझे कौन सा विकल्प चुनना चाहिए?

अद्यतन: एक्सएमएल जावा में बनाया जाएगा और एक .net वेब सेवा के लिए एक स्ट्रिंग के रूप में पारित किया जाएगा, इसे वापस पार्स किया जाएगा। इसलिए मुझे एक स्ट्रिंग के रूप में एक्सएमएल निर्यात करने में सक्षम होना चाहिए और इसे "doc.LoadXml (xmlString) का उपयोग करके लोड करना होगा;"

उत्तर

24

दो विकल्प लगभग बिल्कुल समान हैं। यहां आपके दो विकल्प हैं:

<html>This is &lt;b&gt;bold&lt;/b&gt;</html> 

<html><![CDATA[This is <b>bold</b>]]></html> 

दोनों मामलों में, आपको बचने के लिए विशेष वर्णों के लिए अपनी स्ट्रिंग जांचनी होगी। बहुत से लोग नाटक करते हैं कि सीडीएटीए तारों को किसी भी भागने की आवश्यकता नहीं है, लेकिन जैसा कि आप इंगित करते हैं, आपको यह सुनिश्चित करना होगा कि "]]>" अनचाहे में फिसल नहीं जाता है।

दोनों मामलों में, एक्सएमएल प्रोसेसर आपके स्ट्रिंग को डीकोड करने के लिए वापस कर देगा।

+1

एक कारण है कि मैं सीडीएटीए का उपयोग नहीं करना चाहता हूं, आमतौर पर डेटा के बहुमत से बचने की आवश्यकता नहीं होती है, और यह टेक्स्ट पर इतने सारे सीडीएटीए रैपर देखने के लिए एक गड़बड़ है जिसे किसी भी भागने की आवश्यकता नहीं है।पहली विधि का अर्थ है कि कभी-कभी आपके पास HTML एन्कोडिंग होती है, लेकिन अधिकांश समय में आपके पास कोई अनावश्यक रैपर वाला अच्छा साफ टेक्स्ट नहीं होता है। बेशक यह आपके विशिष्ट डेटा के आधार पर अलग हो सकता है। – AaronLS

0

एन्कोडिंग यह ठीक काम करेगा और विश्वसनीय है। आप बिना किसी कठिनाई के एन्कोडेड सेक्शन एन्कोड कर सकते हैं।

डिकोडिंग स्वचालित रूप से आपके एन्कोडेड HTML को संभालने के लिए उपयोग किए जाने वाले एक्सएमएल पार्सर द्वारा किया जाएगा।

0

मुझे लगता है कि उत्तर एचटीएमएल सामग्री के साथ क्या करने की योजना बना रहा है, और यह भी निर्भर करता है कि आप किस प्रकार की HTML सामग्री का समर्थन करने की योजना बना रहे हैं।

खासकर जब जावास्क्रिप्ट को शामिल करने की बात आती है, तो एन्कोडिंग अक्सर समस्याओं में पड़ती है। सीडीएटीए निश्चित रूप से वहां आपकी मदद करता है।

यदि आप केवल छोटे स्निपेट (यानी एक अनुच्छेद) का उपयोग करने की योजना बना रहे हैं और इसे प्रीप्रोसेस/फ़िल्टर करने का कोई तरीका है (क्योंकि ओयू जावास्क्रिप्ट या फैंसी चीजें वैसे भी नहीं चाहते हैं), तो आप शायद एन्कोडिंग या वास्तव में बेहतर होंगे इसे सीधे एक्सएमएल में उपट्री के रूप में डालें। फिर आप एचटीएमएल को पोस्ट-प्रोसेस कर सकते हैं (यानी फ़िल्टर स्टाइल या ऑनक्लिक विशेषताएं)। लेकिन यह निश्चित रूप से अधिक काम है।

1

मुझे नहीं पता कि आप किस XML निर्माता का उपयोग कर रहे हैं, लेकिन PHP (वास्तव में libxml) जानता है कि ]]> को सीडीएटीए अनुभागों के अंदर कैसे संभालना है, और इसलिए अन्य सभी एक्सएमएल ढांचे को भी चाहिए। तो, मैं एक सीडीएटीए अनुभाग का उपयोग करता हूं।

0

आप दोनों के संयोजन का उपयोग कर सकते हैं। उदाहरण के लिए: आप xml नोड में <h1>....</h1> पास करना चाहते हैं, आपने इसे पास करने के लिए सीडीएटीए अनुभाग का उपयोग किया है। <h1>...</h1> के अंदर सामग्री को HTML इकाइयों जैसे एन्कोड किया जाना चाहिए उदा। &lt;, < के लिए। टैग के बीच एन्कोडिंग की समस्या हल हो जाएगी]]> इंटरप्रिटेड हो रही है क्योंकि इसे ]]&gt; में परिवर्तित कर दिया गया है और एचटीएमएल टैग में ]]> नहीं है।

आप यह केवल तभी कर सकते हैं जब HTML स्वयं उत्पन्न होता है।

1

सीडीएटीए में एचटीएमएल को लपेटना समझ में आता है। एचटीएमएल टेक्स्ट शायद एक्सएमएल में एकल मान पर होगा।

इसलिए इसे सीडीएटीए में लपेटने से सभी एक्सएमएल पार्सर्स को XML दस्तावेज़ के हिस्से के रूप में इसे पढ़ने का कारण नहीं होगा। जबकि एक्सएमएल का उपयोग करते समय इस समस्या को बाधित करना आसान है, अतिरिक्त सिरदर्द क्यों?

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

आशा है कि जिस तरह से मैंने इसका इरादा किया था।

11

सीडीएटीए नेत्र द्वारा पढ़ना आसान है, जबकि एन्कोडेड सामग्री में सीडीएटीए मार्करों का सुरक्षित रूप से अंत हो सकता है - लेकिन आपको परवाह नहीं है। बस एक एक्सएमएल लाइब्रेरी का उपयोग करें और इसके बारे में चिंता करना बंद करो। तो आपको बस इतना कहना है कि "इस पाठ को इस तत्व के अंदर रखें" और लाइब्रेरी या तो इसे एन्कोड करेगा या इसे सीडीएटीए मार्कर में लपेट जाएगी।

1

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

अच्छा एक्सएमएल पुस्तकालय पारदर्शी रूप से दोनों एन्कोडिंग और सीडीएटीए सेगमेंट को संभालेगा। यह सिर्फ मेरी आंखें हैं जो चोट पहुंची हैं।

0

यदि आपका एचटीएमएल अच्छी तरह से गठित है, तो बस HTML टैग को सीडीटीएटीए से बचने या लपेटने के बिना एम्बेड करें। यदि संभव हो, तो यह आपकी सामग्री को XML में रखने में मदद करता है। यह दस्तावेज़ को बदलने और छेड़छाड़ करने के लिए आपको अधिक लचीलापन देता है।

आप HTML के लिए नामस्थान सेट कर सकते हैं, ताकि आप अपने HTML टैग को अन्य XML रैपिंग से अलग कर सकें।

बच निकला पाठ का अर्थ है कि संपूर्ण HTML ब्लॉक एक बड़ा टेक्स्ट नोड होगा। सीडीएटीए में लपेटकर एक्सएमएल पार्सर को उस खंड को पार्स न करने के लिए कहा गया है। यह "आसान" हो सकता है, लेकिन आपकी क्षमताओं को सीमित करता है और उचित होने पर ही नियोजित किया जाना चाहिए; सिर्फ इसलिए नहीं कि यह अधिक सुविधाजनक है। Escaped markup is considered harmful.

+1

एचटीएमएल आवश्यक रूप से मान्य एक्सएमएल नहीं है (उदाहरण के लिए, एचटीएमएल को बंद टैग की आवश्यकता नहीं है)। वे समान दिखते हैं क्योंकि वे एसजीएमएल को उनके सामान्य पूर्वजों के रूप में साझा करते हैं। डेटा का बचने या सीडीएटा का उपयोग करने के लिए वास्तव में एकमात्र विकल्प है। अन्यथा जब यह विकृत मार्कअप पाता है तो XML पार्सर क्रैश हो जाएगा। –

3

यदि आप सीडीएटीए का उपयोग करते हैं, तो आपको इसे सही तरीके से डीकोड करना होगा (टेक्स्ट सामग्री, मूल्य और आंतरिक HTML वे विधियां हैं जो उचित डेटा नहीं लौटाएंगे)। नीचे और फिर xmlDoc हो रही की तरह एक चर में

<response> 
    <command method="setcontent"> 
     <fieldname>flagOK</fieldname> 
     <content>479</content> 
    </command> 
    <command method="setcontent"> 
     <fieldname>htmlOutput</fieldname> 
     <content> 
      <![CDATA[ 
      <tr><td>2013/12/05 02:00 - 2013/12/07 01:59 </td></tr><tr><td width="90">Rastreado</td><td width="60">Placa</td><td width="100">Data hora</td><td width="60" align="right">Km/h</td><td width="40">Direção</td><td width="40">Azimute</td><td>Mapa</td></tr><tr><td>Silverado</td><td align='left'>CQK0052</td><td>05/12/2013 13:55</td><td align='right'>113</td><td align='right'>NE</td><td align='right'>40</td><td><a href="http://maps.google.com/maps?q=-22.6766,-50.2218&amp;iwloc=A&amp;t=h&amp;z=18" target="_blank">-22.6766,-50.2218</a></td></tr><tr><td>Silverado</td><td align='left'>CQK0052</td><td>05/12/2013 13:56</td><td align='right'>112</td><td align='right'>NE</td><td align='right'>23</td><td><a href="http://maps.google.com/maps?q=-22.6638,-50.2106&amp;iwloc=A&amp;t=h&amp;z=18" target="_blank">-22.6638,-50.2106</a></td></tr><tr><td>Silverado</td><td align='left'>CQK0052</td><td>05/12/2013 18:00</td><td align='right'>111</td><td align='right'>SE</td><td align='right'>118</td><td><a href="http://maps.google.com/maps?q=-22.7242,-50.2352&amp;iwloc=A&amp;t=h&amp;z=18" target="_blank">-22.7242,-50.2352</a></td></tr> 
      ]]> 
     </content> 
    </command> 
</response> 

जावास्क्रिप्ट में है, तो आप एक्सएमएल लोड करके (jQuery, उदाहरण के लिए) को डिकोड देगा:

हम कहते हैं कि आप एक xml संरचना इस के समान का उपयोग करते हैं content टैग के 2 घटना (item(1)) के लिए nodeValue

xmlDoc.getElementsByTagName("content").item(1).childNodes[0].nodeValue 

या (दोनों अंकन बराबर हैं)

xmlDoc.getElementsByTagName("content")[1].childNodes[0].nodeValue 
संबंधित मुद्दे