2011-03-02 110 views
5

我擺脫了web.config配置批處理文件(Hanselman's),並希望在vs2010中使用配置轉換功能。不過,我在轉換xml元素(而不是元素上的屬性)方面遇到了一些麻煩。web.config轉換xml元素

這是從我的web.config中的一個片段:

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

我想通過插入基礎上,構建配置不同的URL轉換元素 - 可以這樣做?

在此先感謝!

/賈斯珀

回答

-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> 
+0

我試了一下,但沒有奏效。 – jaspernygaard 2011-03-03 08:45:57

+0

@jaspernygaard解決方案假定根元素是/ Federation。您需要將其調整爲真正的xml結構。您始終可以發佈更完整的問題圖片。 – 2011-03-03 14:13:27

+2

@jaspernygaard我不明白...問題是詢問基於XDT的Web配置變換,而不是XSLT。這個答案中提供的代碼片段顯然是XSLT。這是如何被接受的答案? – 2012-04-01 00:37:00

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> 
+0

看來這應該起作用,但它並沒有,據我所知。 – 2012-11-30 16:21:51

2

如果AllowedAudienceUris和觀衆的元素只出現一次,省略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>