我有一个 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>
但由于某种原因它不起作用。你可能会问你为什么我有两个模板匹配。问题是下面的顶部由第三方提供,我们无法更改。
<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>