2012-08-30 23 views
7

Estoy modificando algún código heredado para tratar de eliminar las advertencias. XmlDataDocument y XslTransform ambos generan advertencias de que están obsoletos. En el caso de XslTransform, el reemplazo sugerido es XslCompiledTransform, pero no se sugiere reemplazo para XmlDataDocument.¿Cuál es la alternativa no obsoleta a XmlDataDocument y XslTransform?

Cómo se puede cambiar el código para eliminar las advertencias en .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); 

Respuesta

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

debería hacer yo pienso. Por supuesto, solo he usado ese MemoryStream para cargar la hoja de estilo y el StringWriter para enviar el resultado de la transformación a medida que el fragmento de código los utilizaba. Por lo general, hay otras fuentes de entrada o destinos de salida como archivos o secuencias o lector de texto.

+0

Tiene razón en que 'XDocument' no implementa' IXPathNavigable' como yo pensaba, pero existe un método de extensión para crear un 'XPathNavigator' a partir de' XDocument': http://msdn.microsoft.com/en-us/library /bb299124.aspx. En cuanto a la transformación a un 'TextWriter' o' StringWriter', eso debería hacer: http://msdn.microsoft.com/en-us/library/ms163435.aspx. –

+0

Muchas gracias Martin, esta solución funcionó en varias secciones del código anterior. –

+0

Martin, 'XDocument' no tiene un método' CreateNavigator', pero 'XslCompiledTransform.Transform' tiene una sobrecarga que acepta un' XmlReader' en su lugar, y puede usar 'XDocument.CreateReader' para que un lector adecuado pase a eso. –

5

XMLDocument es realmente su opción principal. No estoy 100% seguro de lo que estás tratando de hacer con el bloque de código que has publicado, pero se puede dar algo como esto un tiro:

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 todo el respeto, si no sabes lo que está tratando de hacer, entonces ¿quizás no deberías responder la pregunta? Tengo que rechazarte porque no resolviste el problema. –

+2

@John: El problema es que actualmente se ve obligado a usar una API obsoleta para trabajar con XML, lo que me ha parecido bien. El código en sí no está claro en lo que se supone que se debe REALIZAR (aunque esto es principalmente por la opacidad de la API obsoleta), así que di la mejor respuesta que pude. Con respeto, trate de no ser tan rápido para juzgar. – tmesser

Cuestiones relacionadas