如何使用xslt将<configsections>添加到web.config

时间:2017-05-03 10:16:44

标签: xml xslt web-config

我需要使用xslt修改web.config。我们无法直接访问实际的web.config转换前或后转换。修改它的唯一机制是使用xslt。

我编写了一个xslt,可以成功添加其他节点。如果它们存在,我可以添加子节点,或创建父节点,必要时填充子节点。

问题在于<configSections>它需要是<configuration>下的第一个节点,否则IIS会抱怨。如果保证存在,这不会是一个问题,但事实并非如此。无论我尝试过什么,我都无法强制结果可靠地将<configSections>节点作为第一个节点。

在下面的示例中,如果<configSections>不存在,则会将新<configSections>置于顶部,但如果确实存在,则会将其添加到{{{1}内1}}标签)。

我到处搜索,但找不到这个看似简单的问题的解决方案,所以我希望有些XSLT专家会告诉我它真的很简单。应该注意我在xslt(!)

是一个完整的假人

示例源xml:

<configuration>

我的Xslt:

    <configuration>
       <appSettings>
       ...
       </appSettings>
       <otherStuff/>
    </configuration>

1 个答案:

答案 0 :(得分:1)

如果确实存在,我不确定在任意位置添加configSections是什么意思。您将XSLT放在输出中的相同位置,但system.web不存在的情况除外,因为您的XSLT会在任何现有system.web之前放置configSections。 }

无论如何,试试这个XSLT。这应首先选择任何现有的configSections,如果它不存在则添加一个<xsl:template match="configuration"> <xsl:copy> <xsl:apply-templates select="@*"/> <xsl:apply-templates select="configSections"/> <xsl:if test="not(configSections)"> <configSections> <section name="mySection"/> </configSections> </xsl:if> <xsl:if test="not(system.web)"> <system.web> <httpRuntime executionTimeout="180" maxRequestLength="65536"/> </system.web> </xsl:if> <xsl:apply-templates select="node()[not(self::configSections)]"/> </xsl:copy> </xsl:template> 。然后在最后,它可以选择所有其他元素。

{{1}}