2012-08-30 8 views
7

मैं चेतावनियों को खत्म करने की कोशिश करने के लिए कुछ विरासत कोड संशोधित कर रहा हूं। XmlDataDocument और XslTransform दोनों चेतावनी उत्पन्न करते हैं कि वे अप्रचलित हैं। XslTransform के मामले में सुझाया गया प्रतिस्थापन XslCompiledTransform है, लेकिन XmlDataDocument के लिए कोई प्रतिस्थापन नहीं सुझाया गया है।XmlDataDocument और XslTransform के लिए गैर-बहिष्कृत विकल्प क्या है?

मैं कैसे .NET 4 में चेतावनी समाप्त करने के लिए इस कोड को परिवर्तित कर सकते हैं:

var xmlDoc = new System.Xml.XmlDataDocument(myDataSet); 
var xslTran = new System.Xml.Xsl.XslTransform(); 
xslTran.Load(new XmlTextReader(myMemoryStream), null, null); 
var sw = new System.IO.StringWriter(); 
xslTran.Transform(xmlDoc, null, sw, null); 

उत्तर

6
XDocument doc = new XDocument(); 
using (XmlWriter xw = doc.CreateWriter()) 
{ 
    myDataSet.WriteXml(xw); 
    xw.Close(); 
} 

XslCompiledTransform proc = new XslCompiledTransform(); 
using (XmlReader xr = XmlReader.Create(myMemoryStream)) 
{ 
    proc.Load(xr); 
} 

string result; 

using (StringWriter sw = new StringWriter()) 
{ 
    proc.Transform(doc.CreateNavigator(), null, sw); // needs using System.Xml.XPath; 
    result = sw.ToString(); 
} 

मुझे लगता है कि क्या करना चाहिए। बेशक मैंने केवल स्पीडशीट और स्ट्रिंगवाइटर को ट्रांसफॉर्मेशन परिणाम भेजने के लिए मेमोरीस्ट्रीम का उपयोग किया है, क्योंकि आप कोड स्निपेट का इस्तेमाल करते थे। आमतौर पर अन्य इनपुट स्रोत या आउटपुट गंतव्यों जैसे फाइलें, या स्ट्रीम या टेक्स्टreader होते हैं।

+0

आप सही हैं कि 'XDocument'' IXPathNavigable' को लागू नहीं करता है जैसा कि मैंने सोचा था लेकिन 'XDocument' से 'XPathNavigator' बनाने के लिए एक एक्सटेंशन विधि है: http://msdn.microsoft.com/en-us/library /bb299124.aspx। एक 'टेक्स्टवाइटर' या 'स्ट्रिंगवाइटर' में बदलने के लिए, ऐसा करना चाहिए: http://msdn.microsoft.com/en-us/library/ms163435.aspx। –

+0

बहुत धन्यवाद मार्टिन, यह समाधान पुराने कोड के कई वर्गों पर काम करता है। –

+0

मार्टिन, 'एक्सडॉक्यूमेंट' में 'CreateNavigator' विधि नहीं है, लेकिन' XslCompiledTransform.Transform' के पास एक अधिभार है जो इसके बजाय 'XmlReader' स्वीकार करता है, और आप पास करने के लिए उपयुक्त पाठक प्राप्त करने के लिए' XDocument.CreateReader' का उपयोग कर सकते हैं। यह। –

5

XMLDocument वास्तव में अपने मुख्य विकल्प है। मैं तुम्हें कोड ब्लॉक द्वारा पोस्ट की गई के साथ क्या करने की कोशिश कर रहे हैं क्या नहीं 100% यकीन है, लेकिन आप इस एक शॉट की तरह कुछ दे सकते हैं:

public void DoThingsWithXml() 
{ 
    string strXdoc = src.GetTheXmlString(); // however it is you do it 
    XmlDocument xdoc = new XmlDocument(); 
    xdoc.LoadXml(strXdoc); 
    // The other things you need to do 
} 
+1

सम्मान के साथ, यदि आप नहीं जानते कि वह क्या करने का प्रयास कर रहा है, तो शायद आपको इस सवाल का जवाब नहीं देना चाहिए? मुझे आपको कम करने की ज़रूरत है क्योंकि आपने इस मुद्दे को संबोधित नहीं किया है। –

+2

@ जॉन: मुद्दा यह है कि वर्तमान में उन्हें एक्सएमएल के साथ काम करने के लिए एक अप्रचलित एपीआई का उपयोग करने के लिए मजबूर किया जा रहा है, जिसे मैंने ठीक से संबोधित किया था। यह कोड पूरी तरह अस्पष्ट है कि इसे ACCOMPLISH माना जाता है (हालांकि यह ज्यादातर अप्रचलित एपीआई अपारदर्शी एपीआई है), इसलिए मैंने सबसे अच्छा जवाब दिया जो मैं कर सकता था। सम्मान के साथ, न्याय करने के लिए इतनी जल्दी नहीं होने का प्रयास करें। – tmesser

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