जब मैं एक DTD के साथ एक XML दस्तावेज़ (ईगल फ़ाइल) पढ़ने की कोशिश मैं त्रुटि मिलती है:सी ++ बिल्डर XE2, TXMLDocument 'DTD निषिद्ध है'
Project xx raised exception class EDOMParserError with message 'DTD is prohibited'
एक्सएमएल हेडर कुछ इस तरह दिखता है:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE eagle SYSTEM "eagle.dtd">
अगर मैं दूसरी पंक्ति को हटा दें ...
<!DOCTYPE eagle SYSTEM "eagle.dtd">
... सब कुछ ठीक काम करता है।
कुछ googling के बाद ऐसा लगता है कि एमएसएक्सएमएल पार्सर के पास'prohibitDTD 'नामक एक विकल्प है जिसे डिफ़ॉल्ट रूप से सत्य पर सेट किया गया है (पुराने संस्करणों में यह गलत था)।
हालांकि यह विकल्प TXMLDocument क्लास से झूठी पर सेट करना संभव नहीं है। एक समाधान .pas लाइब्रेरी का एक पुनर्मूल्यांकन या CoCreateInstance() के साथ अपने आप को इंटरफ़ेस बनाने के लिए प्रतीत होता है।
मैंने देखा है कि सभी उदाहरण डेल्फी में हैं और मुझे सी ++ बिल्डर को ट्रान्सनल करने के लिए भिन्नताएं हैं।
क्या कोई जानता है कि सी ++ बिल्डर XE2 के साथ एक डीटीडी एक्सएमएल दस्तावेज़ कैसे पढ़ा जाए?
मेरे उदाहरण कोड ...
#include <xmldoc.hpp>
_di_IXMLNode XMLObject;
TXMLDocument *XMLDocument = new TXMLDocument(this);
XMLDocument->LoadFromFile(fileName); // <----- Exception EDOMParserError
XMLObject = XMLDocument->DocumentElement;
धन्यवाद ...
धन्यवाद यह एक आकर्षण की तरह काम करता है! अजीब बात यह है कि जानकारी का यह टुकड़ा ढूंढना इतना कठिन होना चाहिए ... IXMLDocument TXMLDocument से बेहतर क्यों है? जैसा कि मैंने समझा, IXMLDocument TXMLDocument का एक हिस्सा है। –
'TXMLDocument'' IXMLDocument' इंटरफ़ेस लागू करता है, इसलिए इसकी एक ही कार्यक्षमता है। हालांकि, यदि आप 'NULL' स्वामी के साथ' TXMLDocument' को गतिशील रूप से तत्काल करते हैं (जिसे आपको अल्पकालिक एक्सएमएल ऑब्जेक्ट्स बनाते समय करना चाहिए), यह संदर्भ-गणना ऑब्जेक्ट के रूप में कार्य करता है। यह दस्तावेज व्यवहार है। 'TXMLDocument'' वैरिएबल को 'TXMLDocument * 'चर के गतिशील उदाहरण को असाइन करना सुरक्षित नहीं है जब तक कि उसके पास कोई स्वामी असाइन नहीं किया जाता है। अन्यथा, संदर्भ संदर्भ को सही तरीके से बनाए रखने के लिए आपको इसे '_di_IXMLDocument' चर में असाइन करना होगा। –
स्पष्टीकरण के लिए धन्यवाद। मेरे मामले में TXMLDocument * के गतिशील उदाहरण में हमेशा एक मालिक होता है और पूरे एप्लिकेशन के माध्यम से रहता है। मेरे पास पहले से प्रोजेक्ट कोड TXMLDocument के साथ काम कर रहा है, इसलिए मैं इसे पुराने कोड का पुन: उपयोग करने के लिए सुविधा से बाहर उपयोग करता हूं। –