2011-05-31 21 views
8

हर मैंXmlDocument.Save() doctype घोषणा में खाली वर्ग कोष्ठक

XmlDocument.Save(fooFilepath); 

यह DOCTYPE टैग के अंत जैसे कम से दो वर्ग कोष्ठक सम्मिलित करता है पर विधि कॉल सम्मिलित करता है

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE ARCXML SYSTEM "G:\ArcIMS\DTD\arcxml.dtd"[]> 

क्या किसी को पता है कि ऐसा क्यों हो सकता है? मैं स्पष्ट रूप से ऐसा नहीं करना चाहता हूं।

+3

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

+0

'XmlWriter.WriteDocType() 'कार्यान्वयन की जांच करने के बाद, मुझे परेशान है कि' आंतरिक सबसेट 'के साथ' नया 'एक्सडॉक्यूमेंट टाइप क्यों' शून्य 'पर सेट किया गया है, खाली स्क्वायर ब्रैकेट आउटपुट करता है। मेरे मामले में, मैं प्रतिक्रिया पर लिख रहा हूं। आउटपुट। 'सहेजें()' को कॉल करने से पहले, मैंने पुष्टि की कि 'doc.DocumentType.InternalSubset' शून्य है। सभी कार्यान्वयन '[] 'को आउटपुट छोड़ने लगते हैं लेकिन रनटाइम पर यह किसी चीज़ द्वारा एक्सएमएल को लिखा जाता है। –

उत्तर

5

यह a normal (and optional) part of a DOCTYPE declaration है।

<!DOCTYPE rootname SYSTEM url [DTD]> 

कहाँ DTD अपने दस्तावेज़ में किसी भी आंतरिक सबसेट घोषणाओं में शामिल है।

+0

सही! - मुझे नहीं पता था, यह सिर्फ अजीब लग रहा था, लेकिन अगर यह मान्य है, तो यह सब अच्छा है। चीयर्स। – Vidar

+0

इसे रोका जा सकता है? –

+0

हां, यह वैध एक्सएमएल सिंटैक्स है, लेकिन कुछ पार्सर्स इसे संभाल नहीं सकते हैं। – wisbucky

2

अंतर्निहित XmlDocument द्वारा प्रयोग किया जाता पाठक (जो XmlTextReader उपयोग करता है) निर्दिष्ट कोई आंतरिक सबसेट के साथ एक खाली आंतरिक सबसेट के साथ एक दस्तावेज और एक के बीच भेद नहीं करता है, तो यह दोनों ही मामलों के लिए InternalSubset == "" वापस आ जाएगी।

तब XmlDocument.Save() कहा जाता है, यह InternalSubset के लिए एक खाली स्ट्रिंग देखता है और कर्तव्यपूर्वक एक खाली आंतरिक सबसेट लिखता है: []

दुर्भाग्यवश, XmlDocument.DocumentType.InternalSubset पढ़ा गया है, इसलिए आप इसे शून्य पर सेट नहीं कर सकते हैं। आप या तो कर सकते हैं: निचले स्तर XmlTextWriter.WriteDocType()

  1. उपयोग अधिक नियंत्रण।

  2. XDocument का उपयोग करें, जहां आप XDocument.DocumentType.InternalSubset = null सेट कर सकते हैं।

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