web.config转换xml元素

时间:2011-03-02 14:03:02

标签: xml web-config transform

我正在摆脱web.config配置批处理文件(Hanselman's),并希望在vs2010中使用配置转换功能。但是,我在解决转换xml元素时遇到了一些麻烦(而不是元素上的属性)。

这是我的web.config:

的摘录
<Federation type="..." xmlns="...">
      <SigningCertificate .../>
      <AllowedAudienceUris>
               <Audience>https://audience.url.com</Audience>
      </AllowedAudienceUris>
</Federation>

我想通过根据构建配置插入不同的url来转换元素 - 可以这样做吗?

提前致谢!

/碧玉

3 个答案:

答案 0 :(得分:2)

如果AllowedAudienceUris和Audience元素只出现一次,省略xdt:Locator也没关系:

<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <Federation>
    <AllowedAudienceUris xdt:Transform="Replace">
      <Audience>https://example.com</Audience>
    </AllowedAudienceUris>
  </Federation>
</configuration>

答案 1 :(得分:1)

您应该可以使用xdt:Locatorxdt:Transform属性执行此操作。

<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <Federation>
    <AllowedAudienceUris
        xdt:Transform="Replace"
        xdt:Locator="Condition(//Audience)">
      <Audience>https://example.com</Audience>
    </AllowedAudienceUris>
  </Federation>
</configuration>

答案 2 :(得分:-1)

一种方法如下:

<!-- Copy all nodes -->
<xsl:template match="@* | node()">
    <xsl:copy>
        <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
</xsl:template>

<!-- Operate just on the AllowedAudienceUris (copy it), setting the Audience element -->
<xsl:template match="/Federation/AllowedAudienceUris">
    <xsl:copy>
        <Audience>https://hello.com</Audience>
    </xsl:copy>
</xsl:template>