【问题标题】:xslt.Load(New XmlTextReader(New StringReader(xslt))) "xslt compile error"xslt.Load(New XmlTextReader(New StringReader(xslt))) "xslt 编译错误"
【发布时间】:2012-12-02 19:21:57
【问题描述】:

我已阅读其他帖子,但它们并没有解决我的问题。 环境为VB 2008(2.0框架) 下面的代码导致XSLT Compile error 在xslt.Load 行 下面是错误的输出。我将 XSLT 作为字符串传递,所以不知道为什么会出现错误。

Public Function xFrmTlogs(ByVal sXLST As String, ByVal sXML As String) As String
    Dim xslt As New XslCompiledTransform()
    Dim HTMLoutput As String
    Dim writer As New StringWriter()

    Try
        xslt.Load(New XmlTextReader(New StringReader(sXLST.ToString)))
    Catch ex As Exception
        xFrmTlogs = ex.ToString
    End Try

    Dim sourceReader As System.Xml.XmlReader = System.Xml.XmlReader.Create(New System.IO.StringReader(sXML))

    Try
        xslt.Transform(sourceReader, Nothing, writer)
    Catch ex As Exception
        xFrmTlogs = ex.ToString
    End Try

    HTMLoutput = writer.ToString()
    writer.Close()
    xFrmTlogs = HTMLoutput
End Function

System.Xml.Xsl.XslLoadException:XSLT 编译错误。 (3,2) 处发生错误。 --- System.IO.DirectoryNotFoundException:找不到路径“H:\Program”的一部分 文件\common\tr_period.xsl'。 在 System.IO.__Error.WinIOError(Int32 错误代码,字符串可能全路径) 在 System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs,字符串 msgPath,布尔 bFromProxy) 在 System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare 共享,Int32 缓冲区大小) 在 System.Xml.XmlDownloadManager.GetStream(Uri uri,ICredentials 凭据) 在 System.Xml.XmlUrlResolver.GetEntity(Uri absoluteUri,字符串角色,类型 ofObjectToReturn) 在 System.Xml.Xsl.Xslt.XsltLoader.CreateReader(Uri uri,XmlResolver xmlResolver) 在 System.Xml.Xsl.Xslt.XsltLoader.LoadStylesheet(Uri uri,布尔包含) 在 System.Xml.Xsl.Xslt.XsltLoader.LoadInclude() 在 System.Xml.Xsl.Xslt.XsltLoader.LoadRealStylesheet() 在 System.Xml.Xsl.Xslt.XsltLoader.LoadDocument() 在 System.Xml.Xsl.Xslt.XsltLoader.LoadStylesheet(XmlReader 阅读器,布尔包含) --- 内部异常堆栈跟踪结束 --- 在 System.Xml.Xsl.Xslt.XsltLoader.LoadStylesheet(XmlReader 阅读器,布尔包含) 在 System.Xml.Xsl.Xslt.XsltLoader.Load(编译器编译器,对象样式表,XmlResolver xml解析器) 在 System.Xml.Xsl.Xslt.Compiler.Compile(对象样式表,XmlResolver xmlResolver, QilExpression&qil) 在 System.Xml.Xsl.XslCompiledTransform.CompileXsltToQil(对象样式表,XsltSettings 设置,XmlResolver 样式表解析器) 在 System.Xml.Xsl.XslCompiledTransform.LoadInternal(对象样式表,XsltSettings 设置,XmlResolver 样式表解析器) 在 System.Xml.Xsl.XslCompiledTransform.Load(XmlReader 样式表) 在 H:\Documents 中的 VfiSapphire.COMWrapper.xFrmTlogs(String sXLST, String sXML) 和 Settings\xxx\My Documents\Visual Studio2008\ProgramName\ModuleName\PdkBo.vb:line 709

【问题讨论】:

  • "找不到路径的一部分 'H:\Program Files\common\tr_period.xsl'" 如果您在 Windows 资源管理器中键入该路径会怎样?
  • 它正在尝试引用 Web 服务器上的文件 ..\common\tr_period.xsl'
  • 那我觉得“.”不是你想的那样。不是服务器的URL,是文件路径。

标签: vb.net


【解决方案1】:

存储在sXSLT 中的XSLT 脚本可能包含<xsl:include> 或<xsl:import> 元素,它试图在H:\Program Files\common\tr_period.xsl 中包含/导入另一个XSLT 脚本文件。由于该文件不存在或无法访问,因此转换失败。

【讨论】:

  • 是的,这就是问题所在!它正在尝试访问 .XLS 文件 该文件位于 Web 服务器上,我该如何解决?
  • tr_period.xsl 文件实际上必须是 XSLT 文件,而不是 Excel 电子表格或任何东西。本质上,include 和 import 命令用于包含来自另一个文件的所有 XSLT 代码,就好像它是同一个文件的一部分一样。因此,如果脚本不需要该文件来成功运行,您可以删除该行。如果没有,您可以将路径修复到文件的正确位置。
  • 我从 Web 服务器检索 XML 和 XLST。在 XLST 中有一个链接,,我已将该文件移动到本地硬盘驱动器上的目标中。解析不完整。感谢您帮助我。
猜你喜欢
  • 2011-09-17
  • 1970-01-01
  • 2019-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多