Я трансформация XSLT показано ниже:преобразование 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>
Вы забыли показать входной XML. – Tomalak
Извините, добавил вход xml. –
У вас не может быть двух шаблонов, соответствующих одному и тому же узлу, и ожидать, что оба они будут запущены. Только один из них будет запущен ('' в вашем случае). Мой вопрос: Очевидно, вы * можете * изменить XSLT-файл и добавить свой собственный шаблон, так почему вы говорите, что не можете изменить другой шаблон? –
Tomalak