web.config преобразует элемент xml - PullRequest
5 голосов
/ 02 марта 2011

Я избавляюсь от командного файла конфигурации web.config (Hanselman) и хочу использовать функцию преобразования конфигурации в vs2010.Однако у меня возникли некоторые проблемы с преобразованием элемента XML (в отличие от атрибута элемента).

Это фрагмент моего web.config:

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

Я хочу преобразовать элемент, вставив другой URL-адрес в зависимости от конфигурации сборки - это можно сделать?

Заранее спасибо!

/ Джаспер

Ответы [ 3 ]

2 голосов
/ 20 января 2012

Если элементы 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 голос
/ 19 января 2012

Вы можете сделать это, используя атрибуты xdt:Locator и xdt: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 голосов
/ 02 марта 2011

Один подход будет следующим:

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