1

私は現在、次のコードを使用してライブの「メモリ内」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();

ただし、6行目でファイルをXmlDocumentからMemoryStreamに移動すると、チェックするとストリームに何も含まれないため、プログラム全体の実行が停止します。

なぜこれが起こるのか誰かが知っていますか?

更新:ストリームには現在情報が含まれていますが、XmlReaderオブジェクトはまだ情報を受信して​​いません。

4

3 に答える 3

3

単純化してみる

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);
于 2012-08-10T08:07:18.580 に答える
1
Stream XmlStream = new MemoryStream();

どのようにそれに何かがあることができますか?空のmemoryStreamを構築しています...

編集 :

'using'命令(http://msdn.microsoft.com/fr-fr/library/yh598w02)を使用して、それを明確にするようにしてください。基本的に、StreamReader、MemeryStreamなどのクラスはIDisposableインターフェイスを実装します。を使用してそれらをラップすると、オブジェクトが自動的に破棄されます。

于 2012-08-10T07:58:42.377 に答える
1

ストリームをフラッシュしてリセットしてみてください。

XmlDoc.Save(XmlStream);
XmlStream.Flush();
XmlStream.Position = 0;
XmlReader XmlRdr = XmlReader.Create(XmlStream);
于 2012-08-10T08:00:48.697 に答える