2012-08-30 8 views
7

Modyfikuję niektóre starsze kody, aby wyeliminować ostrzeżenia. XmlDataDocument i XslTransform oba generują ostrzeżenia, że ​​są przestarzałe. W przypadku XslTransform sugerowana zamiana to XslCompiledTransform, ale nie sugeruje się wymiany dla XmlDataDocument.Jaka jest nierozastępowana alternatywa dla XmlDataDocument i XslTransform?

Jak mogę zmienić ten kod, aby wyeliminować ostrzeżenia w .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); 

Odpowiedz

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

powinien zrobić myślę. Oczywiście użyłem tylko tego MemoryStream do załadowania arkusza stylów i StringWriter'a w celu wysłania wyniku transformacji do użytego fragmentu kodu. Zwykle są inne źródła wejściowe lub miejsca docelowe wydruku, takie jak pliki, strumienie lub Textreader.

+0

Masz rację, że 'XDocument' nie implementuje' IXPathNavigable', tak jak myślałem, ale istnieje metoda rozszerzenia, aby utworzyć 'XPathNavigator' z' XDocument': http://msdn.microsoft.com/en-us/library /bb299124.aspx. Jeśli chodzi o transformowanie do 'TextWriter' lub' StringWriter', powinno to zrobić: http://msdn.microsoft.com/en-us/library/ms163435.aspx. –

+0

Dziękuję bardzo, Martin, to rozwiązanie działało na wielu sekcjach starego kodu. –

+0

Martin, 'XDocument' nie ma metody' CreateNavigator', ale 'XslCompiledTransform.Transform' ma przeciążenie, które akceptuje' XmlReader' zamiast tego, i możesz użyć 'XDocument.CreateReader', aby uzyskać odpowiedni czytnik do przekazania to. –

5

XMLDocument jest naprawdę głównym rozwiązaniem. Nie jestem w 100% pewien, co próbujesz zrobić z bloku kodu już pisał, ale można dać coś jak ten strzał:

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

Z szacunkiem, jeśli nie wiesz, co on próbuje zrobić, to może nie powinieneś odpowiadać na pytanie? Muszę cię zgodzić, ponieważ nie rozwiązałeś problemu. –

+2

@John: Problem polega na tym, że jest on obecnie zmuszony do używania przestarzałego API do pracy z XML-em, który rozwiązałem dobrze. Sam kod jest dość niejasny co do tego, co powinno ZOSTAĆ WYKONANE (chociaż jest to głównie wina tego, jak nieprzejrzyste jest przestarzałe API), więc dałem najlepszą odpowiedź, jaką mogłem. Z szacunkiem, staraj się nie osądzać tak szybko. – tmesser

Powiązane problemy