Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 什么';XmlDataDocument和XslTransform的非推荐替代方案是什么?_C#_Xslt_.net 4.0 - Fatal编程技术网

C# 什么';XmlDataDocument和XslTransform的非推荐替代方案是什么?

C# 什么';XmlDataDocument和XslTransform的非推荐替代方案是什么?,c#,xslt,.net-4.0,C#,Xslt,.net 4.0,我正在修改一些遗留代码,试图消除警告XmlDataDocument和XslTransform都会生成已过时的警告。在XslTransform的情况下,建议替换为xslcomiledtransform,但不建议替换XmlDataDocument 如何更改此代码以消除.NET 4中的警告: var xmlDoc = new System.Xml.XmlDataDocument(myDataSet); var xslTran = new System.Xml.Xsl.XslTransform(); x

我正在修改一些遗留代码,试图消除警告
XmlDataDocument
XslTransform
都会生成已过时的警告。在
XslTransform
的情况下,建议替换为
xslcomiledtransform
,但不建议替换
XmlDataDocument

如何更改此代码以消除.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);
这确实是你的主要选择。我不能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
}

我想应该这样。当然,我只使用MemoryStream加载样式表,使用StringWriter将转换结果发送到您的代码段中。通常还有其他输入源或输出目的地,如文件、流或文本阅读器。

恕我直言,如果你不知道他想做什么,那么也许你不应该回答这个问题?约翰:问题是,他目前被迫使用一个过时的API来处理XML,我很好地解决了这个问题。代码本身并不清楚它应该完成什么(尽管这主要是因为过时的API不透明),所以我给出了最好的答案。恕我直言,请不要这么快就判断.XmlDocument现在已经贬值了。您是对的,
XDocument
没有像我想的那样实现
ixpathnavigatable
,但是有一个扩展方法可以从
XDocument
创建
XPathNavigator
:。至于转换为
TextWriter
StringWriter
,应该这样做:。非常感谢Martin,此解决方案适用于旧代码的多个部分。Martin,
XDocument
没有
CreateNavigator
方法,但是
xslcomiledtransform.Transform
有一个重载,它接受一个
XmlReader
,您可以使用
XDocument.CreateReader
来获得一个合适的读取器来传递给它。John,我已经在XDocument上发布了提供CreateNavigator的扩展方法的链接,我可以再次发布它,所以我不知道你为什么声称这个方法不存在,除了被intellisense误导。但是由于扩展方法是命名空间
System.Xml.XPath的一部分,intellisense只能通过
using System.Xml.XPath找到它我在编辑中的代码示例中也指出了这一点。
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();
}