gpt4 book ai didi

xslt - XslCompiledTransform 因堆栈溢出而失败

转载 作者:行者123 更新时间:2023-12-04 04:50:17 25 4
gpt4 key购买 nike

我有一个包含 805 模板的大型 XSLT 文件,根据系统和环境,该文件会因堆栈溢出而失败。

开发环境为 Windows 7、InfoPath 2010 和 C#。尽管安装了 .NET 4.0,但此版本的 InfoPath 使用 .NET 2.0。

使用的例程是:

private void TransformXML(String inputFileName, String transformFileName, String outputFileName)
{
CorralLog(String.Concat("Transform with ", transformFileName, ": ", inputFileName, " -> ", outputFileName));

using (XmlReader inputFile = XmlReader.Create(inputFileName, null))
{
XslCompiledTransform transform = new XslCompiledTransform(true);
XsltSettings settings = new XsltSettings(true, false);

transform.Load(transformFileName, settings, null);

using(XmlWriter outputFile = XmlWriter.Create(outputFileName))
{
filesToDelete.Add(outputFileName);
transform.Transform(inputFile, outputFile);
}
}
}

我可以看到一些可能性:
  • 增加“transform.Load”命令可用的内存
  • 启动一个具有更多内存的单独线程
  • 启动一个单独的线程并使用“msxsl.exe”(始终有效)执行转换
  • 将 XSLT 文件拆分成更小的部分并多次进行转换

  • 有没有人对选择哪个选项有建议?或者有什么其他建议?

    保罗

    有问题的 XLST 文件从 XML 文件中获取一些元素,更改一些元素的名称,并生成另一个 XML 文件。大约有 800 个元素,每个元素都有自己的模板。

    此代码显示了 XSLT 文件开头的三个模板和两个用于复制元素的模板:一个用于按原样复制元素,另一个用于更改元素的名称。所有后续模板都以这两种方式之一进行格式化。

    是这种语法导致递归,还是导致堆栈溢出的模板数量。 (通过在新线程中运行此转换,我们已经避免了这个问题,但可能没有解决它。)
    <?xml version="1.0"?>

    <xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt"
    xmlns:my="http://schemas.microsoft.com/office/infopath/2003/myXSD/2011-03-16T10:53:27">

    <xsl:output indent="yes"/>
    <xsl:strip-space elements="*"/>

    <xsl:template match="/">
    <xsl:apply-templates select="*"/>
    </xsl:template>

    <xsl:template match="/*">
    <xsl:copy>
    <xsl:apply-templates select="*"/>
    </xsl:copy>
    </xsl:template>

    <xsl:template match="*">
    <xsl:apply-templates select="*"/>
    </xsl:template>

    <xsl:template match="/SAN/ClientProfiles/ClientProfile">
    <xsl:copy>
    <xsl:apply-templates/>
    </xsl:copy>
    </xsl:template>

    <xsl:template match="/SAN/ClientProfiles/ClientProfile/Name">
    <CompanyName>
    <xsl:apply-templates/>
    </CompanyName>
    </xsl:template>

    最佳答案

    关于xslt - XslCompiledTransform 因堆栈溢出而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17536336/

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