2

オブジェクトがあり、2 番目のスタイルシートを介して渡す必要があるためXslCompiledTransform、オブジェクトで出力したいと考えています。XmlReader少し混乱しています。XML を正常に変換して、StreamReaderまたはを使用して読み取ることができますXmlDocumentが、 を試してXmlReaderも何も得られません。

以下の例では、stylesheetは私のXslCompiledTransformオブジェクトです。最初の 2 つのConsole.WriteLine呼び出しでは正しい変換済み XML が出力されますが、3 番目の呼び出しでは XML が返されません。がテキストを期待しているのではないかと推測しているXmlTextReaderので、これを StreamReader でラップする必要があるかもしれません..? 私は何を間違っていますか?

MemoryStream transformed = new MemoryStream();
stylesheet.Transform(input, args, transformed);
transformed.Position = 0;

StreamReader s = new StreamReader(transformed);
Console.WriteLine("s = " + s.ReadToEnd()); // writes XML
transformed.Position = 0;

XmlDocument doc = new XmlDocument();
doc.Load(transformed);
Console.WriteLine("doc = " + doc.OuterXml); // writes XML
transformed.Position = 0;

XmlReader reader = new XmlTextReader(transformed);
Console.WriteLine("reader = " + reader.ReadOuterXml()); // no XML written
4

1 に答える 1

3

このメソッドは、現在のノードXmlReader.ReadOuterXmlの XML を読み取ります。リーダーを初めて作成するときは、現在のノードがないため、何も返されません。ReadOuterXml

次の行を追加する場合:

reader.Read();

...ReadOuterXml()呼び出しの前に、期待どおりに機能します。

PS 通常、Read()メソッドの結果をテストして、リーダーが実際に読み取るものがあることを確認する必要があります。

于 2010-06-03T14:09:49.427 に答える