XslCompiledTransform類有問題。 如果我試圖運行此代碼:XslCompiledTransform不能用字符串創建的XmlTestReader進行轉換
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."
InnerException.Message:
"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。由於安全原因,我不會創建temporaty xslt解密文件。
在哪行中得到異常?是pathToInputFile相對路徑? –
請向我們展示確切的細節,例如完整的異常消息,引發異常的聲明,堆棧跟蹤並告訴我們樣式表代碼是否嘗試解析相對URL(樣式表代碼是否使用'document'函數?)。 –