C# C XSLT内存转换

C# C XSLT内存转换,c#,xslt,memorystream,C#,Xslt,Memorystream,我目前正在使用以下代码运行一个实时的“内存中”XSLT转换 XmlDocument XmlDoc = new XmlDocument(); XmlDoc.LoadXml(DS.GetXml()); XslCompiledTransform XsltTranformation = new XslCompiledTransform(); XsltTranformation.Load(@"C:\Users\maskew\Desktop\XSLTMapping.xsl"); Stream XmlStre

我目前正在使用以下代码运行一个实时的“内存中”XSLT转换

XmlDocument XmlDoc = new XmlDocument();
XmlDoc.LoadXml(DS.GetXml());
XslCompiledTransform XsltTranformation = new XslCompiledTransform();
XsltTranformation.Load(@"C:\Users\maskew\Desktop\XSLTMapping.xsl");
Stream XmlStream = new MemoryStream();
XmlDoc.Save(XmlStream); //Stream is still blank after this line
XmlReader XmlRdr = XmlReader.Create(XmlStream);
MemoryStream stm = new MemoryStream();
XsltTranformation.Transform(XmlRdr, null, stm);
stm.Position = 1;
StreamReader sr = new StreamReader(stm);
string Output = sr.ReadToEnd();
Output = Output.Substring(2);
XmlDoc.LoadXml(Output);
XmlWriter XmlWrtr = XmlWriter.Create(@"C:\Users\maskew\Desktop\XmlMapping.xml");
XmlDoc.WriteTo(XmlWrtr);
XmlWrtr.Flush();
XmlWrtr.Close();
但是,当我将文件从XmlDocument移动到第6行的MemoryStream时,当检查时,流不包含任何内容,从而停止整个程序的运行

有人知道为什么会这样吗

更新:流现在包含信息,但是XmlReader对象仍然没有接收到任何信息

Stream XmlStream = new MemoryStream();
里面怎么会有东西?您正在构建一个空的memoryStream

编辑:

您应该尝试使用“使用”说明来澄清它http://msdn.microsoft.com/fr-fr/library/yh598w02. 基本上,像StreamReader、MemeryStream等类。。实现IDisposable接口。如果使用包装它们,它将自动为您处理对象

里面怎么会有东西?您正在构建一个空的memoryStream

编辑:


您应该尝试使用“使用”说明来澄清它http://msdn.microsoft.com/fr-fr/library/yh598w02. 基本上,像StreamReader、MemeryStream等类。。实现IDisposable接口。如果使用包装它们,它将自动为您处理对象。

尝试刷新并重置流:

XmlDoc.Save(XmlStream);
XmlStream.Flush();
XmlStream.Position = 0;
XmlReader XmlRdr = XmlReader.Create(XmlStream);

尝试刷新并重置流:

XmlDoc.Save(XmlStream);
XmlStream.Flush();
XmlStream.Position = 0;
XmlReader XmlRdr = XmlReader.Create(XmlStream);
试着简化一下

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.PreserveWhitespace = true;
xmlDoc.LoadXml(DS.GetXml());

// Create a writer for writing the transformed file.
XmlWriter writer = XmlWriter.Create(@"C:\Users\maskew\Desktop\XmlMapping.xml");

// Create and load the transform with script execution enabled.
XslCompiledTransform transform = new XslCompiledTransform();
XsltSettings settings = new XsltSettings();
settings.EnableScript = true;
transform.Load(@"C:\Users\maskew\Desktop\XSLTMapping.xsl", settings, null);

// Execute the transformation.
transform.Transform(xmlDoc, writer);
试着简化一下

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.PreserveWhitespace = true;
xmlDoc.LoadXml(DS.GetXml());

// Create a writer for writing the transformed file.
XmlWriter writer = XmlWriter.Create(@"C:\Users\maskew\Desktop\XmlMapping.xml");

// Create and load the transform with script execution enabled.
XslCompiledTransform transform = new XslCompiledTransform();
XsltSettings settings = new XsltSettings();
settings.EnableScript = true;
transform.Load(@"C:\Users\maskew\Desktop\XSLTMapping.xsl", settings, null);

// Execute the transformation.
transform.Transform(xmlDoc, writer);


您如何确认流是空的?你是在检查长度还是在尝试读取长度?如果你是在尝试读取长度,仔细检查显示流包含700多个字符,这会影响我的开始问题。现在,当移动到XmlReader时,下面的一行出现了问题,并且没有任何内容进入读取器。您如何确认流是空的?你是在检查长度还是在尝试读取长度?如果你是在尝试读取长度,仔细检查显示流包含700多个字符,这会影响我的开始问题。现在,当移动到有问题的XmlReader时,下面的一行出现了问题,并且在Reader.XmlDoc.SaveXmlStream中没有任何内容;将xml文档保存到该文档下一行的流中。它在2.0上,更改为4.0,因为我不打算使用2.0:也实现了using指令,这实际上解决了问题,谢谢您还应该尝试使用XDocument using System.xml.Linq类而不是XmlDocument。XmlDocument已弃用。XmlDoc.SaveXmlStream;将xml文档保存到该文档下一行的流中。它在2.0上,更改为4.0,因为我不打算使用2.0:也实现了using指令,这实际上解决了问题,谢谢您还应该尝试使用XDocument using System.xml.Linq类而不是XmlDocument。XmlDocument已被弃用。已经这样做,并且经过仔细检查,流现在看起来不是问题,更新了原始问题。已经这样做,并且经过仔细检查,流现在看起来不是问题,更新了原始问题。由于xslt删除了空白,我被迫将其作为流提供,并且无法使用已编译的XmlDocument执行此操作,我已经尝试过。我更新了代码以保留空白,第2行您尝试过这个吗?当从我的XSLT工作表中删除空格剥离并将.PreserveWhitespace改为false时,这个方法很有效。-移动了接受,因为这是一个更简单的实现。由于xslt删除了空白,我被迫将其作为流提供,并且无法使用编译过的XmlDocument执行此操作,我已经尝试过。我更新了代码以保留空白,第2行您尝试过这个吗?当从我的XSLT工作表中删除空格剥离并将.PreserveWhitespace改为false时,这个方法很有效。-因为它是一个更简单的实现,所以将接受移到了另一个位置