2012-09-05 13 views
9

के भीतर सफेद स्थान को संपीड़ित करता है मेरे पास एक जावास्क्रिप्ट दिनचर्या है जो AJAX के माध्यम से एक एक्सएमएल स्ट्रीम पकड़ लेती है और फिर इसे पार करती है। यह एफएफ और क्रोम में ठीक काम करता है लेकिन आईई 9 में, यदि नोड के भीतर लगातार लाइन फ़ीड्स हैं, तो आईई उन्हें एक स्पेस और एक लाइन फीड में संपीड़ित करता है।आईई 9 एक्सएमएल डोम

विशेष रूप से, जहां रेटनोड एक एक्सएमएल नोड है, retNode.text में IE में संपीड़ित सफेद स्थान है, लेकिन इसमें एफएफ और क्रोम के सभी वर्ण शामिल हैं।

मैंने एक्सएमएल को पार्स करने के लिए अपना खुद का दिनचर्या लिखने की कोशिश की है, लेकिन यह नाजुक और समय बर्बाद लगता है। मैंने PreserveWhitespace प्रॉपर्टी का उपयोग करने का प्रयास किया, लेकिन ऐसा लगता है कि जावास्क्रिप्ट में उपलब्ध नहीं है। मैंने retNode.nodeValue का उपयोग retNode.text के बजाय करने का प्रयास किया, लेकिन नोड वैल्यू का कोई मूल्य नहीं था।

मैं ऐसे समाधान को पसंद करूंगा जो jquery का उपयोग नहीं करता क्योंकि मुझे jquery नहीं पता है, और मुझे यकीन नहीं है कि jquery work बनाने के लिए मुझे कौन सा कोड जोड़ने की आवश्यकता होगी।

अग्रिम धन्यवाद!

+3

यदि आपको अपने व्हाइटस्पेस को संरक्षित करने की अपेक्षा है तो आपको 'सीडीएटीए' या कुछ का उपयोग करना चाहिए। क्या आप इस एक्सएमएल स्रोत को संशोधित कर सकते हैं? – Brad

+0

सामान्य मामले में, एक्सएमएल में व्हाइटस्पेस का उपचार दस्तावेज व्याकरण - डीटीडी या एक्सएसडी तक है। यह बहुत लंबा रहा है क्योंकि मैंने जवाब देने के लिए इस क्षेत्र में ब्राउज़र व्यवहार को देखा था। – McDowell

उत्तर

1

preserveWhiteSpace जावास्क्रिप्ट में उपलब्ध है।

क्या आपने निम्न कोड का प्रयास किया है?

var xhr = new XMLHttpRequest(); 
xhr.responseXML.preserveWhiteSpace = true; 
… 
+0

'preserveWhiteSpace' वास्तव में आईई पर जावास्क्रिप्ट से उपलब्ध है, लेकिन कनेक्शन स्थापित करने से पहले 'xhr.responseXML' तक पहुंचने का प्रयास करने से निम्नलिखित त्रुटि मिल जाएगी:' इस ऑपरेशन को पूरा करने के लिए आवश्यक डेटा अभी तक उपलब्ध नहीं है '। @ जोफॉकेट के मुताबिक, 'ओपन() 'और' send() 'कॉल करने के बीच आईई 8 के साथ' xhr.responseXML.preserveWhiteSpace = true' को कॉल करना संभव था, लेकिन IE9 के साथ ऐसा करने से निम्नलिखित त्रुटि आती है: 'नहीं कर सका त्रुटि c00c023f' के कारण ऑपरेशन पूर्ण करें। – avernet

0

यह केवल उन टैग्स के बीच सफेद जगह होना चाहिए जो आप खो रहे हैं। गैर टैग (जैसे टैग की एक जोड़ी के भीतर तारों के बीच) के बीच व्हाइटस्पेस हमेशा संरक्षित किया जाना चाहिए।

दूसरे शब्दों में <tag> </tag><tag></tag> बन जाएगा जबकि <tag>foo bar</tag> अनचाहे रहेगा।

आप दो टैग के बीच खाली स्थान के संरक्षित किये जाने की जरूरत है, और preserveWhiteSpace किसी कारण से आप के लिए काम नहीं कर रहा है, तो मुझे लगता है कि आप &nbsp; की यदि संभव हो तो अपने XML स्रोत में &#160; डाल करने के लिए (संख्यात्मक संस्करण होगा आप जो सामान्य परिस्थितियों में यह एक गैरकानूनी एक्सएमएल चरित्र नहीं है, यानी जब तक आप इकाई को परिभाषित नहीं करते हैं)

+1

एक सादा स्थान एक गैर-ब्रेक करने योग्य स्थान से अलग है, इसलिए आपके द्वारा प्रस्तावित समाधान सख्ती से बराबर नहीं है जो प्रश्न पूछने वाले व्यक्ति के लिए प्रयास कर रहा है। – avernet