.net 正在尝试使用XSLT更改帐户并在应用程序配置中传入AdMemberShipProvider。。。看起来正确,但它';它不工作了
在应用程序配置中提供:.net 正在尝试使用XSLT更改帐户并在应用程序配置中传入AdMemberShipProvider。。。看起来正确,但它';它不工作了,.net,xslt,.net,Xslt,在应用程序配置中提供: <system.web> <membership defaultProvider="ClientAuthenticationMembershipProvider"> <providers> <add name="MyADMembershipProvider" type="System.Web.Security.ActiveDirectoryMembershipPr
<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>
这个xslt转换:
<xsl:template match="/configuration/system.web/membership/providers/add[@name='MyADMembershipProvider']/@connectionUsername" >
<xsl:attribute name="connectionUsername">
<xsl:text>TestUser</xsl:text>
</xsl:attribute>
</xsl:template>
测试用户
有人能告诉我为什么XXXXXXX没有被TestUser取代吗?我其余的简单XSLT交换工作与我预期的一样
出于某种原因,这两种方法不起作用
我正在使用.NETXSLT引擎
谢谢
Cal-显然,您希望复制所有内容,但不更改connectionUserName属性值。这可以通过以下转换实现
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="@connectionUsername">
<xsl:attribute name="connectionUsername">TestUser</xsl:attribute>
</xsl:template>
</xsl:stylesheet>
测试用户
不过,一定要在输入xml中添加一个结束标记
已编辑
根据请求,我更改了模板中的match属性值,以便只更新特定add元素的connectionUserName属性
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="@connectionUsername[../@name='MyADMembershipProvider']">
<xsl:attribute name="connectionUsername">TestUser</xsl:attribute>
</xsl:template>
</xsl:stylesheet>
测试用户
此转换:
<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>
生成所需的正确结果(将连接用户名
属性更改为“TestUser”
):
,包括更多上下文信息,以避免所有add
元素上的所有connectionUsername
属性都被修改为具有相同值的“TestUser”
——与此问题的另一个提供的答案相同
这项工作:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="//membership/providers/add[@name='MyADMembershipProvider']/@connectionUsername" >
<xsl:attribute name="connectionUsername">
<xsl:text>TestUser</xsl:text>
</xsl:attribute>
</xsl:template>
</xsl:stylesheet>
示例XML中的根节点是
<system.web>
您不使用的原因是什么?我正在尝试使用Build流程中其他地方使用的相同工具。单一工具,重用标记,这是唯一的原因。我想你错过了他在原始代码中提到的那些条件。你猜对了,因为这很明显,我想我应该就这样离开它。但是现在你和迪米特都提到了这一点,我将编辑我的答案。记住br对你来说显而易见的东西对其他人来说并不显而易见,特别是当他们在这个问题上寻求帮助时。奇怪的、不必要的副作用是无济于事的。谢谢你的修改,因为修改后的答案是4个答案中最有用的。你说得对!而且-幸运的是-虽然我们都说了相同的话,但用不同的措辞和不同的测试级别来测试要更改的节点:-)当我测试它时,这是有效的,但当我添加了antoehr one来更新密码时,它会重写密码,重击用户名,所以我选择了Maistros修订的答案,它具有最少的副作用,谢谢大家的帮助,我把问题简化了,完全没有任何过错!当我尝试这个答案时,它在我的应用中不起作用,所以我选择了maestros修订的答案。谢谢你催促他修改它。@EricBrown Cal,啊!那么XPath肯定是错误的。很高兴它无论如何都能起作用:)
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="//membership/providers/add[@name='MyADMembershipProvider']/@connectionUsername" >
<xsl:attribute name="connectionUsername">
<xsl:text>TestUser</xsl:text>
</xsl:attribute>
</xsl:template>
</xsl:stylesheet>
/configuration/system.web/membership/providers/add
<system.web>