कस्टम XML मार्कअप के साथ काम करना
कस्टम XML मार्कअप के साथ काम करना
यह गाइड दिखाता है कि कैसे कस्टम XML डेटा को पढ़ें और प्रबंधित करें जो एक Word दस्तावेज़ अपनी दृश्यमान सामग्री के साथ ले जा सकता है — डेटा जिसका उपयोग कंटेंट कंट्रोल्स को बाइंड करने, एप्लिकेशन-विशिष्ट मेटाडेटा संग्रहीत करने, या मनमाने पैकेज पार्ट्स को एम्बेड करने के लिए किया जाता है। Document.CustomXmlParts दस्तावेज़-स्तर के कस्टम XML डेटा को उजागर करता है, और Document.PackageCustomParts पैकेज-स्तर के कस्टम पार्ट्स को उजागर करता है जो विशेष रूप से कस्टम XML नहीं हैं।
कस्टम XML पार्ट्स
CustomXmlPart दस्तावेज़ से जुड़ा एक कस्टम XML डेटा द्वीप दर्शाता है — वही तंत्र जिसे Word XML-मैप्ड कंटेंट कंट्रोल्स को समर्थन देने के लिए उपयोग करता है। प्रत्येक पार्ट में एक Id, एक Data बाइट एरे होता है जो कच्चा XML रखता है, एक DataChecksum, और एक Schemas प्रॉपर्टी (एक CustomXmlSchemaCollection) है जो उससे जुड़े XML स्कीमा की सूची देती है। Document.CustomXmlParts एक CustomXmlPartCollection लौटाता है: Add(part) मौजूदा CustomXmlPart को संलग्न करता है, Add(id, xml) एक को सीधे id और XML स्ट्रिंग से बनाता है, GetById(id) एक विशिष्ट पार्ट को पुनः प्राप्त करता है, और RemoveAt(index)/Clear() पार्ट्स को हटाते हैं। CustomXmlPart और CustomXmlPartCollection दोनों Clone() को उजागर करते हैं ताकि कस्टम XML डेटा की डुप्लिकेशन की जा सके, उदाहरण के तौर पर जब दस्तावेज़ों के बीच सामग्री कॉपी की जाती है।
कस्टम XML स्कीमा
CustomXmlSchemaCollection, जो CustomXmlPart.Schemas के माध्यम से पहुंचा जाता है, एक कस्टम XML पार्ट से जुड़े स्कीमा URI की सूची देता है। यह Add(value), Remove(name), RemoveAt(index), IndexOf(value), Clear(), और Clone() को समर्थन देता है, साथ ही एक Count प्रॉपर्टी — स्कीमा URI को पार्स किए गए स्कीमा ऑब्जेक्ट्स के बजाय साधारण स्ट्रिंग्स के रूप में ट्रैक किया जाता है।
कस्टम XML प्रॉपर्टीज़
CustomXmlPart से अलग, CustomXmlProperty एक एकल नाम/मान XML गुण का प्रतिनिधित्व करता है, जिसे CustomXmlProperty(name, uri, value) से निर्मित किया गया है और Name, Uri, और Value को उजागर करता है। CustomXmlPropertyCollection इनका एक सेट प्रबंधित करता है: Add(property) एक जोड़ता है, इंडेक्सर (उदा. properties["MyProp"]) नाम द्वारा एक को ढूँढ़ता है और Contains(name) जाँचता है कि वह मौजूद है या नहीं, IndexOfKey(name) उसकी स्थिति लौटाता है, और Remove(name)/RemoveAt(index)/Clear() प्रविष्टियों को हटाते हैं। SmartTag.Properties एक CustomXmlPropertyCollection लौटाता है, जो एक लिगेसी स्मार्ट टैग के संरचित डेटा को दर्शाने का तरीका है (नीचे देखें)।
पैकेज-स्तरीय कस्टम भाग
Document.PackageCustomParts एक CustomPartCollection देता है जिसमें CustomPart वस्तुएँ होती हैं — OOXML पैकेज में संग्रहीत मनमाने भाग जो कस्टम XML डेटा नहीं हैं, जैसे कि अन्य अनुप्रयोगों द्वारा फ़ाइल को छूने पर जोड़े गए भाग। प्रत्येक CustomPart के पास एक Name, ContentType, RelationshipType, एक Data बाइट एरे, और एक IsExternal फ़्लैग होता है जो दर्शाता है कि भाग एम्बेडेड सामग्री के बजाय बाहरी संदर्भ है या नहीं। संग्रह Add(part), RemoveAt(index), Clear(), और Clone() का समर्थन करता है, साथ ही Count भी।
लेगेसी स्मार्ट टैग्स
SmartTag एक नोड प्रकार (NodeType.SmartTag) है जो पहचाने गए टेक्स्ट के चारों ओर लिपटा लेगेसी Word स्मार्ट टैग दर्शाता है। एक SmartTag को SmartTag(doc) से निर्मित किया जाता है, और Element (पहचानकर्ता तत्व का नाम) तथा Uri (पहचानकर्ता का नेमस्पेस) को उजागर करता है, साथ ही Properties — एक CustomXmlPropertyCollection जो टैग किए गए टेक्स्ट से जुड़ा संरचित डेटा रखता है। क्योंकि SmartTag एक नोड है, यह अन्य नोड्स की तरह दस्तावेज़ वृक्ष में भी भाग लेता है, Accept(visitor), AcceptStart(visitor), और AcceptEnd(visitor) को DocumentVisitor-आधारित ट्रैवर्सल के लिए समर्थन देता है।
MarkupLevel
MarkupLevel एक enum है — Unknown, Inline, Block, Row, Cell — जो दस्तावेज़ वृक्ष में वह संरचनात्मक स्तर वर्णित करता है जहाँ एक मार्कअप तत्व जैसे संरचित दस्तावेज़ टैग हो सकता है।
टिप्स और सर्वोत्तम अभ्यास
- जब आपको आवश्यक भाग का आईडी पता हो, तो संग्रह को मैन्युअली इटररेट करने के बजाय
CustomXmlPartCollection.GetById(id)का उपयोग करें। - पूर्ण बाइट तुलना किए बिना यह पता लगाने के लिए कि अंतर्निहित XML डेटा बदल गया है या नहीं,
CustomXmlPart.DataChecksumपढ़ें। Document.CustomXmlParts(कस्टम XML डेटा, अक्सर कंटेंट कंट्रोल्स से जुड़ा) औरDocument.PackageCustomParts(मनमाने गैर-XML पैकेज भाग) को अलग पहचानें — उनका उद्देश्य अलग है और वे अलग-अलग संग्रहीत होते हैं।- स्मार्ट टैग्स वाले लेगेसी दस्तावेज़ों के साथ काम करते समय, टैग बनाने वाले पहचानकर्ता को निर्धारित करने के लिए
SmartTag.ElementऔरUriको साथ में जांचें, फिर उसकेPropertiesपर भरोसा करें। - दस्तावेज़ों के बीच डेटा कॉपी करते समय, कच्चे XML को पुनः पढ़ने और पुनः जोड़ने के बजाय
CustomXmlPart.Clone()(या संग्रह केClone()) से कस्टम XML भागों को क्लोन करें।
सामान्य समस्याएँ
| समस्या | कारण | समाधान |
|---|---|---|
CustomXmlPartCollection.GetById(id) कुछ उपयोगी नहीं लौटाता | id Document.CustomXmlParts में वर्तमान में किसी भी भाग से मेल नहीं खाता | id की पुष्टि करने के लिए संग्रह को सूचीबद्ध करें, या पहले Add(id, xml) के साथ भाग जोड़ें |
| कस्टम XML डेटा दृश्यमान कंटेंट कंट्रोल्स से असंबंधित दिखता है | कंटेंट कंट्रोल्स अपने स्वयं के डेटा-बाइंडिंग कॉन्फ़िगरेशन के माध्यम से कस्टम XML से बंधते हैं, हर CustomXmlPart से स्वतः नहीं | यह पुष्टि करें कि दिया गया कंटेंट कंट्रोल किस भाग से बंधा है, बजाय यह मानने के कि Document.CustomXmlParts के साथ 1:1 संबंध है। |
दूसरे एप्लिकेशन द्वारा जोड़ा गया पैकेज भाग CustomXmlParts में नहीं मिला। | Non-XML पैकेज भाग Document.PackageCustomParts के माध्यम से उजागर किए जाते हैं, CustomXmlParts के बजाय। | इसके बजाय PackageCustomParts (एक CustomPartCollection) जांचें। |
SmartTag.Properties खाली है। | हर स्मार्ट टैग रिकग्नाइज़र संरचित गुण नहीं जोड़ता। | विशिष्ट गुणों की अपेक्षा करने से पहले यह पुष्टि करने के लिए कि कौन-सा रिकग्नाइज़र टैग बनाता है, SmartTag.Element/Uri जांचें। |
FAQ
CustomXmlPart और CustomXmlProperty में क्या अंतर है?
CustomXmlPart एक पूरा XML डेटा द्वीप है (एक बाइट-ऐरे पेलोड और संबंधित स्कीमा के साथ), जिसे Document.CustomXmlParts के माध्यम से पहुँचा जाता है। CustomXmlProperty एक एकल नाम/मान जोड़ी है, सामान्यतः SmartTag.Properties के माध्यम से पहुँचा जाता है न कि सीधे दस्तावेज़ से।
मैं दस्तावेज़ में कस्टम XML डेटा कैसे जोड़ूँ?
एक id स्ट्रिंग और XML सामग्री के साथ Document.CustomXmlParts.Add(id, xml) को कॉल करें, या अलग से एक CustomXmlPart बनाएँ और इसे Add(part) को पास करें।
पैकेज कस्टम पार्ट्स क्या हैं, और वे कस्टम XML पार्ट्स से कैसे अलग हैं?
Document.PackageCustomParts (एक CustomPartCollection जिसमें CustomPart वस्तुएँ हैं) मनमाने OOXML पैकेज पार्ट्स को रखता है जो कस्टम XML नहीं हैं — प्रत्येक में एक ContentType, RelationshipType, और कच्चा Data होता है। Document.CustomXmlParts विशेष रूप से कस्टम XML डेटा द्वीपों के लिए है।
एक SmartTag क्या है?
SmartTag एक लेगेसी Word फीचर है जो उस टेक्स्ट को दर्शाता है जिसे एक स्मार्ट-टैग रिकग्नाइज़र ने पहचाना और घेरा है। यह एक दस्तावेज़ नोड (NodeType.SmartTag) है जिसमें एक Element और Uri होता है जो रिकग्नाइज़र की पहचान करता है, और एक Properties संग्रह जिसमें CustomXmlProperty मान होते हैं जो रिकग्नाइज़र ने जोड़े हैं।
मैं कस्टम XML डेटा को दस्तावेज़ों के बीच कैसे कॉपी करूँ?
स्रोत भाग पर CustomXmlPart.Clone() का उपयोग करें, फिर क्लोन को लक्ष्य दस्तावेज़ के Document.CustomXmlParts में Add(part) के साथ जोड़ें।
API Reference सारांश
| क्लास/मेथड | विवरण |
|---|---|
CustomXmlPart | एकल कस्टम XML डेटा द्वीप जो दस्तावेज़ से जुड़ा है |
Document.CustomXmlParts | दस्तावेज़ पर सभी कस्टम XML भागों का CustomXmlPartCollection |
CustomXmlPartCollection.Add(id, xml) / GetById(id) | आईडी द्वारा कस्टम XML भाग जोड़ें या प्राप्त करें |
CustomXmlSchemaCollection | एक CustomXmlPart से संबंधित स्कीमा URIs |
CustomXmlProperty | एक एकल नाम/मान XML प्रॉपर्टी |
CustomXmlPropertyCollection | एक संग्रह CustomXmlProperty मानों का, जैसे SmartTag.Properties पर |
Document.PackageCustomParts | किसी भी गैर-XML OOXML पैकेज भागों का CustomPartCollection |
CustomPart | एक पैकेज-स्तर का कस्टम भाग जिसमें Name, ContentType और कच्चा Data है |
SmartTag | लेगेसी नोड प्रकार जो टेक्स्ट को घेरता है और स्मार्ट-टैग पहचानकर्ता द्वारा पहचाना जाता है |
MarkupLevel | Enum जो वर्णन करता है कि मार्कअप तत्व दस्तावेज़ ट्री में कहाँ हो सकता है |