2012-08-30 12 views
7

Uyarıları gidermek için bazı eski kodları değiştiriyorum. XmlDataDocument ve XslTransform her ikisi de eski olduklarına dair uyarılar üretir. XslTransform durumunda önerilen değiştirme XslCompiledTransform'dur, ancak XmlDataDocument için hiçbir yedek önerilmemektedir.XmlDataDocument ve XslTransform için onaylanmamış alternatif nedir?

nasıl .NET 4'te uyarıları ortadan kaldırmak için bu kodu değiştirebilirsiniz:

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

cevap

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

bence yapmalıdır. Tabii ki, sadece, bunu kullanabilmeniz için kod parçasını kod olarak kullandıkça, dönüşüm sonucunu göndermek için stil sayfasını ve StringWriter'i yüklemek için MemoryStream'i kullandım. Genellikle dosyalar veya akışlar veya Textreader gibi diğer giriş kaynakları veya çıkış hedefleri vardır.

+0

'XDocument' 'IXPathNavigable'ı uygulayamadığı gibi haklısınız ama XDocument'den bir' XPathNavigator 'oluşturmak için bir uzantı yöntemi var: http://msdn.microsoft.com/en-us/library /bb299124.aspx. Bir "TextWriter" veya "StringWriter" 'e dönüştürülmek için, şu anlama gelir: http://msdn.microsoft.com/en-us/library/ms163435.aspx. –

+0

Çok teşekkürler Martin, bu çözüm eski kodun birden çok bölümünde çalıştı. –

+0

Martin, 'XDocument'' 'CreateNavigator' yöntemine sahip değil,' 'XslCompiledTransform.Transform'' 'XmlReader'ı kabul eden bir aşırı yüke sahiptir ve 'XDocument.CreateReader' kullanabilirsiniz. o. –

5

XMLDocument gerçekten ana seçenektir. Ben size gönderdiniz kod bloğu ile yapmaya çalıştığımız şeyin% 100 emin değilim, ama bu bir mermi gibi bir şey verebilir:

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

Saygı, eğer ne yapmaya çalıştığını bilmiyorsanız, belki de bu soruya cevap vermemelisiniz? Sorunu çözmediğiniz için sizi reddetmek zorundayım. –

+2

@John: Sorun şu anda XML ile çalışmak için eski bir API kullanmaya zorlanıyor. Kod kendisi (aslında eski API ne kadar opak bir hata olsa da) ACCOMPLISH için ne gerekiyorsa oldukça açık değil, bu yüzden ben en iyi cevap verdim. Saygı ile, yargılamak için çok hızlı olmamaya çalışın. – tmesser