6

Tengo una sección personalizada en mi archivo web.config similar a esta estructura:XDT Config Transforms - ReplaceAll?

<Messages> 
    <Message id="1'> 
    <Property Name="foo" value="bar" /> 
    </Message> 
    <Message id="2'> 
    <Property Name="foo" value="bar2" /> 
    </Message> 
</Messages> 

quiero aplicar una transformación personalizada en este ejemplo que puedo cambiar el valor de todas las instancias del elemento de propiedad con Name = "foo" - pero no puedo hacer que funcione.

He intentado:

<Messages> 
    <Message> 
    <Property Name="foo" value="updated" xdt:Locator=Match(Name) xdt:Transform="Replace" /> 
    </Message> 
</Mesasges> 

puedo eliminar todos los elementos mediante la sustitución de la transformada = Reemplazar con una Transform = RemoveAll - alguna idea de cómo puedo lograr algo similar para reemplazar todos los valores?

+0

Tal vez nos muestran lo que ha intentado? –

+0

Lo siento, el formato XMl me consiguió la primera vez. Actualizado ahora –

Respuesta

7

Parece que Transform: Replace solo reemplaza el primer elemento coincidente de documentation on msdn: ... Si se selecciona más de un elemento, solo se reemplaza el primer elemento seleccionado. He resuelto este problema mediante el uso de una combinación de Match-Condiciones y SetAttributes, algo así como:

<Messages> 
    <Message> 
    <Property value="updated" xdt:Locator=Condition(@Name='foo') xdt:Transform="SetAttributes(value)" /> 
    </Message> 
</Messages> 
+0

para una aclaración adicional, de la documentación: _... La transformación SetAttributes afecta a ** todos ** los elementos seleccionados. Esto es diferente del atributo de transformación Reemplazar, que afecta ** solo ** al primer elemento seleccionado si se seleccionan múltiples elementos_. –

+0

Es vital mencionar que el XPath no es suficiente para que esto funcione. La estructura de XML en transformación * debe * reflejar la estructura del XML que se está transformando, por lo que si el nodo 'Property' se colocó como una raíz de transformación, no funcionará. Y, lo que es más, solo funciona con 'SetAttributes',' Replace' no funcionará tampoco – SOReader