gpt4 book ai didi

c# - "Execution of the ' document() ' function was prohibited."其中 EnableDocumentFunction 设置为 true?

转载 作者:数据小太阳 更新时间:2023-10-29 02:19:42 26 4
gpt4 key购买 nike

尝试 xslt 转换时,我在生产环境中遇到间歇性 System.Xml.Xsl.XslTransformException 异常,不幸的是我无法在开发环境中复制它。

异常吐出更多细节:

Execution of the 'document()' function was prohibited. Use the XsltSettings.EnableDocumentFunction property to enable it. An error occurred at C:\path\to\file\CDS.xsl(16,3).

但是在处理代码中 EnableDocumentFunction 属性设置为 true:

private void Transform()
{
var keepTrying = true;
var tryCount = 0;
const int maxRetrys = 3;

while (keepTrying)
{
try
{
var xmlResolver = new XmlUrlResolver();

using (var xmlFile = new XmlNodeReader(_xDoc))
{
var settings = new XmlReaderSettings
{
XmlResolver = xmlResolver,
ProhibitDtd = false,
DtdProcessing = DtdProcessing.Ignore
};

using (var xsl = XmlReader.Create(_xslPath, settings))
{
var xslt = new XslCompiledTransform(true);
xslt.Load(xsl, new XsltSettings { EnableDocumentFunction = true }, xmlResolver);

var sb = new StringBuilder();
using (var writer = XmlWriter.Create(sb, xslt.OutputSettings))
{
xslt.Transform(xmlFile, null, writer, xmlResolver); // errors out here.
}

var xhtml = sb.ToString();
_transformedXml = xhtml;
_isTransformed = true;

xsl.Close();
}
}

keepTrying = false;
}
catch (System.Xml.Xsl.XsltException ex)
{
ExceptionPolicy.HandleException(ex, "ExceptionLogging");

tryCount++;
if (tryCount > maxRetrys)
{
keepTrying = false;
throw;
}
}
}
}

xslt 文件由第三方提供并自动更新,因此无法重写。这是它的顶部,出于隐私原因略有修改:

<?xml version="1.0"?>

<!--
Interaction_550.xsl : 20110916
-->
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:example="http://www.example.com" version="1.0">
<xsl:param name="D2DSeverityFilter"></xsl:param>
<xsl:param name="D2HSeverityFilter"></xsl:param>
<xsl:param name="DocumentationFilter"></xsl:param>
<xsl:output method="html"/>
<xsl:key name="d2d_sev_level-lookup" match="example:d2d_sev_level" use="@name"/>
<xsl:key name="d2h_sev_level-lookup" match="example:d2h_sev_level" use="@name"/>
<xsl:key name="d2l_sev_level-lookup" match="example:d2l_sev_level" use="@name"/>
<xsl:key name="preg_cat-lookup" match="example:preg_cat" use="@cat"/>
<xsl:key name="doc_level-lookup" match="example:doc_level" use="@name"/>
<xsl:variable name="d2d_sev_level-top" select="document('')/*/example:d2d_sev_levels"/>
<xsl:variable name="d2h_sev_level-top" select="document('')/*/example:d2h_sev_levels"/>
<xsl:variable name="d2l_sev_level-top" select="document('')/*/example:d2l_sev_levels"/>

<xsl:variable name="doc_level-top" select="document('')/*/example:doc_levels"/>
<xsl:variable name="preg_cat-top" select="document('')/*/example:preg_cats"/>
<xsl:template match="/">
<head>
<style type="text/css">
body {
font-family : arial,sans serif,helvetica;
}
...

我怎样才能:

  • 解决这个问题,让它不再发生?
  • 否则,我该如何在开发中复制它?

最佳答案

或者,对于 MS XslCompiledTransform 类,您可以使用 XsltSettings 类来避免此错误,正如错误本身所描述的那样。 from MSDN

关于c# - "Execution of the ' document() ' function was prohibited."其中 EnableDocumentFunction 设置为 true?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8235464/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com