2012-08-30 10 views
7

Sto modificando alcuni codici legacy per provare a eliminare gli avvisi. XmlDataDocument e XslTransform generano entrambi degli avvisi che sono obsoleti. Nel caso di XslTransform la sostituzione suggerita è XslCompiledTransform, ma non è consigliata alcuna sostituzione per XmlDataDocument.Qual è l'alternativa non deprecata a XmlDataDocument e XslTransform?

Come posso modificare il codice per eliminare gli avvertimenti in .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); 

risposta

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(); 
} 

dovrebbe fare credo. Ovviamente, ho usato solo MemoryStream per caricare il foglio di stile e StringWriter per inviare il risultato della trasformazione allo snippet di codice usato. Di solito ci sono altre fonti di input o destinazioni di output come file, stream o Textreader.

+0

Hai ragione che 'XDocument' non implementa' IXPathNavigable' come pensavo ma esiste un metodo di estensione per creare un 'XPathNavigator' da' XDocument': http://msdn.microsoft.com/en-us/library /bb299124.aspx. Per quanto riguarda la trasformazione in 'TextWriter' o' StringWriter', è necessario: http://msdn.microsoft.com/en-us/library/ms163435.aspx. –

+0

Grazie mille Martin, questa soluzione ha funzionato su più sezioni del vecchio codice. –

+0

Martin, 'XDocument' non ha un metodo' CreateNavigator', ma 'XslCompiledTransform.Transform' ha un overload che accetta un' XmlReader', invece, e puoi usare 'XDocument.CreateReader' per ottenere un lettore adatto da passare a esso. –

5

XMLDocument è davvero la vostra opzione principale. Sono sicuro al 100% quello che stai cercando di fare con il blocco di codice che hai postato, ma si può dare qualcosa di simile a questo un colpo:

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

Con rispetto, se non sai cosa sta cercando di fare, allora forse non dovresti rispondere alla domanda? Devo farti downvotare poiché non hai risolto il problema. –

+2

@John: Il problema è che attualmente è costretto a utilizzare un'API obsoleta per lavorare con XML, che ho affrontato bene. Il codice in sé non è chiaro su cosa dovrebbe fare ACCOMPAGNARE (anche se questo è principalmente colpa di quanto opaco sia l'API obsoleta), quindi ho dato la migliore risposta possibile. Con rispetto, cerca di non essere così veloce da giudicare. – tmesser

Problemi correlati