XslCompiledTransform クラスに問題があります。このコードを実行しようとした場合:
string pathToXsltFile, pathToInputFile, pathToOutputFile;
XsltSettings xsltSettings = new XsltSettings(true, true);
XslCompiledTransform myXslTransform = new XslCompiledTransform();
XmlTextReader reader = new XmlTextReader(pathToFile);
myXslTransform.Load(reader, xsltSettings, new XmlUrlResolver());
myXslTransform.Transform(pathToInputFile, pathToOutputFile);
それは正常に動作します。しかし、文字列 (テキスト) から XmlTextReader を作成したい場合:
MemoryStream mStrm = new System.IO.MemoryStream(Encoding.UTF8.GetBytes(text));
XmlTextReader xmlReader = new XmlTextReader(mStrm);
mStrm.Position = 0;
そして実行してみてください:
myXslTransform.Load(xmlReader, xsltSettings, new XmlUrlResolver());
myXslTransform.Transform(pathToInputFile, pathToOutputFile);
私は例外を取得します:
"this operation is not supported for a relative uri"
いくつかの理由で、一時ファイルを作成したくなく、このファイルへのパスから XmlTextReader を作成します。
編集:
完全な例外メッセージ:
"An error occurred while loading document ''.
See InnerException for a complete description of the error."
内部例外.メッセージ:
"This operation is not supported for a relative URI."
スタックトレース:
at System.Xml.Xsl.Runtime.XmlQueryContext.GetDataSource(String uriRelative, String uriBase)
at <xsl:template match=\"gmgml:FeatureCollection\">(XmlQueryRuntime {urn:schemas-microsoft-com:xslt-debug}runtime, XPathNavigator {urn:schemas-microsoft-com:xslt-debug}current)
at <xsl:apply-templates>(XmlQueryRuntime {urn:schemas-microsoft-com:xslt-debug}runtime, XPathNavigator )
at Root(XmlQueryRuntime {urn:schemas-microsoft-com:xslt-debug}runtime)
at Execute(XmlQueryRuntime {urn:schemas-microsoft-com:xslt-debug}runtime)
at System.Xml.Xsl.XmlILCommand.Execute(Object defaultDocument, XmlResolver dataSources, XsltArgumentList argumentList, XmlSequenceWriter results)
at System.Xml.Xsl.XmlILCommand.Execute(Object defaultDocument, XmlResolver dataSources, XsltArgumentList argumentList, XmlWriter writer, Boolean closeWriter)
at System.Xml.Xsl.XmlILCommand.Execute(XmlReader contextDocument, XmlResolver dataSources, XsltArgumentList argumentList, Stream results)
at System.Xml.Xsl.XslCompiledTransform.Transform(String inputUri, String resultsFile)
at MyNamespace.ApplyXslTransformation1(String input, String output, String xsltFileName)
例外の原因となったステートメント:
myXslTransform.Transform(pathToInputFile, pathToOutputFile);
ドキュメント機能については、明日聞かなければなりません。他の人からxsltファイルを入手しました。
xslt ファイルへのパスから XmlTextReader ファイルを作成したら、すべて問題ありませんでした。私も使用しようとしました:
myXslTransform.Load(pathToXsltFile, xsltSettings, new XmlUrlResolver());
myXslTransform.Transform(pathToInputFile, pathToOutputFile);
そしてそれも大丈夫でした。
これで、暗号化された xslt を取得できます。私はそれを復号化し、復号化された文字列から XmlTextReader を作成したいと考えています。セキュリティ上の理由から、一時的な xslt 復号化ファイルを作成するつもりはありません。