Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 正在尝试使用XSLT更改帐户并在应用程序配置中传入AdMemberShipProvider。。。看起来正确,但它';它不工作了_.net_Xslt - Fatal编程技术网

.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>