【问题标题】:web.config transform xml elementweb.config 转换 xml 元素
【发布时间】:2011-07-07 07:29:28
【问题描述】:

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

这是我的 web.config 中的一个 sn-p:

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

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

提前致谢!

/贾斯珀

【问题讨论】:

    标签: xml web-config transform


    【解决方案1】:

    如果 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>
    

    【讨论】:

      【解决方案2】:

      您应该可以使用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>
      

      【讨论】:

      • 这似乎应该有效,但据我所知,它没有。
      【解决方案3】:

      一种方法如下:

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

      【讨论】:

      • @jaspernygaard 解决方案是假设根元素是 /Federation。您需要使其适应真正的 xml 结构。您可以随时发布更完整的问题图片。
      • @jaspernygaard 我不明白...问题是关于基于 XDT 而不是 XSLT 的 Web Config Transform。此答案中提供的代码 sn-p 显然是 XSLT。这是如何被接受的答案?
      猜你喜欢
      • 2011-05-26
      • 2011-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-17
      • 2011-09-30
      • 2020-02-06
      相关资源
      最近更新 更多