XDT 配置转换 - ReplaceAll?

Posted

技术标签:

【中文标题】XDT 配置转换 - ReplaceAll?【英文标题】:XDT Config Transforms - ReplaceAll? 【发布时间】:2011-11-26 13:28:10 【问题描述】:

我的 web.config 文件中有一个类似于此结构的自定义部分:

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

我想对此应用自定义转换,以便我可以使用 Name="foo" 更改 Property 元素的所有实例的值 - 但我似乎无法让它工作。

我试过了:

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

我可以通过将 Transform=Replace 替换为 Transform=RemoveAll 来删除所有元素 - 有什么想法可以实现类似的东西来替换所有值吗?

【问题讨论】:

也许向我们展示你尝试了什么? 抱歉,XMl 格式第一次吸引了我。现已更新 【参考方案1】:

似乎 Transform:Replace 只替换 documentation on msdn 中的第一个匹配元素:...如果选择了多个元素,则只替换第一个选择的元素。 我解决了这个问题通过使用 Match-Conditions 和 SetAttributes 的组合来发出问题,例如:

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

【讨论】:

为了进一步澄清,来自文档:...SetAttributes 转换影响 所有 选定元素。这与 Replace 转换属性不同,如果选择了多个元素,则该属性仅影响第一个选择的元素 重要的是要提到 XPath 不足以使其工作。转换中 XML 的结构必须反映被转换的 XML 的结构,因此如果将Property 节点作为转换的根,它将不起作用。而且,它只适用于SetAttributesReplace 也不起作用

以上是关于XDT 配置转换 - ReplaceAll?的主要内容,如果未能解决你的问题,请参考以下文章

VSTS中JSON的XDT转换?

XDT 转换:InsertBefore - 定位器条件被忽略

如何将“'”转换为“''”

XML query() 有效,value() 需要找到单例 xdt:untypedAtomic

Java String ReplaceAll 方法给出非法重复错误?

JS 中 ReplaceAll 方法