Это преобразование :
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="add[@name = 'MyADMembershipProvider']">
<add connectionUsername="TestUser">
<xsl:apply-templates select=
"@*[not(name()='connectionUsername')]
| node()
"/>
</add>
</xsl:template>
</xsl:stylesheet>
при применении к предоставленному документу XML (в элементе configuration
):
<configuration>
<system.web>
<membership defaultProvider="ClientAuthenticationMembershipProvider">
<providers>
<add name="MyADMembershipProvider"
type="System.Web.Security.ActiveDirectoryMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
connectionStringName="ADConnectionString"
connectionUsername="XXXXXXX"
connectionPassword="YYYYYYY"
attributeMapUsername="SAMAccountName"
/>
<add name="ClientAuthenticationMembershipProvider"
type="System.Web.ClientServices.Providers.ClientFormsAuthenticationMembershipProvider, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
serviceUri="" />
</providers>
</membership>
</system.web>
</configuration>
дает требуемый, правильный результат (атрибут connectionUsername
изменен на "TestUser"
):
<configuration>
<system.web>
<membership defaultProvider="ClientAuthenticationMembershipProvider">
<providers>
<add connectionUsername="TestUser" name="MyADMembershipProvider"
type="System.Web.Security.ActiveDirectoryMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
connectionStringName="ADConnectionString"
connectionPassword="YYYYYYY"
attributeMapUsername="SAMAccountName"/>
<add name="ClientAuthenticationMembershipProvider"
type="System.Web.ClientServices.Providers.ClientFormsAuthenticationMembershipProvider, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
serviceUri=""/>
</providers>
</membership>
</system.web>
</configuration>
Примечание :
Нет xsl:attribute
используется вообще.
Шаблон шаблона шаблона, который переопределяет правило идентификации , включает дополнительную контекстную информацию - чтобы избежать случая, когда все атрибуты connectionUsername
на всех add
элементы модифицируются так, чтобы иметь одинаковое значение "TestUser"
- как это произошло бы с другим предоставленным ответом на этот вопрос.