首页 > 解决方案 > 使用 Powershell .Net 方法将 XML 转换为 HTML - System.Xml.Xsl.XslLoadException:XSLT 编译错误

问题描述

我正在尝试使用 Powershell .Net 方法将XML 文件转换为 XSL 文件。

$xslt = New-Object System.Xml.Xsl.XslCompiledTransform
$xslt.Load("C:\Users\admin\Downloads\recoveryHistory_en.xsl")

我收到以下错误消息。

PSMessageDetails      :
Exception             : System.Management.Automation.MethodInvocationException: Exception calling "Load" with "1" argument(s): "XSLT compile error." ---> System.Xml.Xsl.XslLoadException: XSLT compile error. --->
                        System.Xml.XmlException: For security reasons DTD is prohibited in this XML document. To enable DTD processing set the DtdProcessing property on XmlReaderSettings to Parse and pass the settings into
                        XmlReader.Create method.
                           at System.Xml.XmlTextReaderImpl.Throw(Exception e)
                           at System.Xml.XmlTextReaderImpl.ParseDoctypeDecl()
                           at System.Xml.XmlTextReaderImpl.ParseDocumentContent()
                           at System.Xml.Xsl.Xslt.XsltInput.ReadTextNodes()
                           at System.Xml.Xsl.Xslt.XsltInput.ReadNextSibling()
                           at System.Xml.Xsl.Xslt.XsltInput.FindStylesheetElement()
                           at System.Xml.Xsl.Xslt.XsltLoader.LoadDocument()
                           at System.Xml.Xsl.Xslt.XsltLoader.LoadStylesheet(XmlReader reader, Boolean include)
                           --- End of inner exception stack trace ---
                           at System.Xml.Xsl.Xslt.XsltLoader.LoadStylesheet(XmlReader reader, Boolean include)
                           at System.Xml.Xsl.Xslt.XsltLoader.Load(Compiler compiler, Object stylesheet, XmlResolver xmlResolver)
                           at System.Xml.Xsl.Xslt.Compiler.Compile(Object stylesheet, XmlResolver xmlResolver, QilExpression& qil)
                           at System.Xml.Xsl.XslCompiledTransform.LoadInternal(Object stylesheet, XsltSettings settings, XmlResolver stylesheetResolver)
                           at CallSite.Target(Closure , CallSite , Object , String )
                           --- End of inner exception stack trace ---
                           at System.Management.Automation.ExceptionHandlingOps.ConvertToMethodInvocationException(Exception exception, Type typeToThrow, String methodName, Int32 numArgs, MemberInfo memberInfo)
                           at CallSite.Target(Closure , CallSite , Object , String )
                           at System.Dynamic.UpdateDelegates.UpdateAndExecute2[T0,T1,TRet](CallSite site, T0 arg0, T1 arg1)
                           at System.Management.Automation.Interpreter.DynamicInstruction`3.Run(InterpretedFrame frame)
                           at System.Management.Automation.Interpreter.EnterTryCatchFinallyInstruction.Run(InterpretedFrame frame)
TargetObject          :
CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
FullyQualifiedErrorId : XslLoadException
ErrorDetails          :
InvocationInfo        : System.Management.Automation.InvocationInfo
ScriptStackTrace      : at <ScriptBlock>, <No file>: line 1
PipelineIterationInfo : {}

正如错误指出的那样,我将 DTDProcessing 设置为 Parse,但仍然没有运气。

[System.Xml.XmlReaderSettings]$xml=New-Object System.Xml.XmlReaderSettings
$xml.DtdProcessing = 'Parse'
$xml


Async                        : False
NameTable                    :
XmlResolver                  :
LineNumberOffset             : 0
LinePositionOffset           : 0
ConformanceLevel             : Document
CheckCharacters              : True
MaxCharactersInDocument      : 0
MaxCharactersFromEntities    : 0
IgnoreWhitespace             : False
IgnoreProcessingInstructions : False
IgnoreComments               : False
ProhibitDtd                  : False
DtdProcessing                : Parse
CloseInput                   : False
ValidationType               : None
ValidationFlags              : ProcessIdentityConstraints, AllowXmlAttributes
Schemas                      : System.Xml.Schema.XmlSchemaSet

我在这个论坛中发现了很多与我类似的问题(使用 xslt将 xml 转换为 html,使用 Xslt 将 Xml 转换为 Html时如何绑定标签 ID,使用PSCX Convert-XML 将 XML 转换为 HTML 的语法是什么?使用 PowerShell 将 XML 转换为 HTML)。我尝试了其中的一些(例如:convert-xml、验证 xml 文件内容等)。有没有人知道错误消息是什么以及可能出了什么问题?

标签: xmlpowershellxslt

解决方案


我认为你需要尝试

$xrs=New-Object System.Xml.XmlReaderSettings
$xrs.DtdProcessing = 'Parse'

$xr = [System.Xml.XmlReader]::Create("C:\Users\admin\Downloads\recoveryHistory_en.xsl", xrs)

$xslt.Load($xr)

推荐阅读