以下に示すXSLT変換があります。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
<xsl:output method="xml" indent="yes" />
<xsl:template match="/configuration">
<xsl:copy>
<xsl:apply-templates select="@* | node()" />
<xsl:element name="system.diagnostics">
<trace autoflush="true">
<listeners>
<add type="Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener, Microsoft.WindowsAzure.Diagnostics" name="AzureDiagnostics"></add>
</listeners>
</trace>
</xsl:element>
</xsl:copy>
</xsl:template>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="configuration">
<xsl:copy>
<xsl:apply-templates select="@* | node()" />
<xsl:element name="location">
<xsl:attribute name="path">securfolder1</xsl:attribute>
<system.web>
<authorization>
<deny users="*"/>
</authorization>
</system.web>
</xsl:element>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
上記が以下を生成することを期待しています:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.diagnostics>
<trace autoflush="true">
<listeners>
<add name="AzureDiagnostics"
type="Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener, Microsoft.WindowsAzure.Diagnostics"/>
</listeners>
</trace>
</system.diagnostics>
<location path="securfolder1">
<system.web>
<authorization>
<deny users="*"/>
</authorization>
</system.web>
</location>
</configuration>
しかし、何らかの理由で機能していません。なぜ 2 つのテンプレートが一致するのかと尋ねられるかもしれません。問題は、サードパーティが提供する以下の上部セクションを変更できないことです。
<xsl:template match="/configuration">
<xsl:copy>
<xsl:apply-templates select="@* | node()" />
<xsl:element name="system.diagnostics">
<trace autoflush="true">
<listeners>
<add type="Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener, Microsoft.WindowsAzure.Diagnostics" name="AzureDiagnostics"></add>
</listeners>
</trace>
</xsl:element>
</xsl:copy>
</xsl:template>
以下は入力 XML です。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
</configuration>