You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MSBuild中使用XmlPoke创建或更新XML元素值

在MSBuild中实现XML元素的存在则更新、不存在则创建

我需要在MSBuild目标里实现:将指定XML元素的值设为目标值,如果元素不存在则创建它。尝试用XmlPoke任务,但它只对已存在的元素生效。

待更新的初始XML

<?xml version="1.0" encoding="utf-8"?>
<manifest>
  <metadata>
    <name>whatever</name>
    <version>1.2.3.4</version>
  </metadata>
</manifest>

XmlPoke对已存在元素的生效情况

使用以下XmlPoke任务可以成功修改version元素的值:

<XmlPoke
  XmlInputPath="$(XmlFilePath)"
  Query="/manifest/metadata/version"
  Value="4.3.2.1" />

执行后的结果:

<?xml version="1.0" encoding="utf-8"?>
<manifest>
  <metadata>
    <name>whatever</name>
    <version>4.3.2.1</version>
  </metadata>
</manifest>

问题:元素不存在时XmlPoke无操作

如果输入XML中缺少version元素,XmlPoke不会执行任何操作:

<?xml version="1.0" encoding="utf-8"?>
<manifest>
  <metadata>
    <name>whatever</name>
  </metadata>
</manifest>

解决方案:结合XmlPeek与XmlPoke实现需求

通过XmlPeek先检查目标元素是否存在,再根据检查结果选择执行更新或创建操作,具体代码如下:

<XmlPeek
   XmlInputPath="$(XmlFilePath)"
   Query="/manifest/metadata/version">
   <Output
      TaskParameter="Result"
      ItemName="VersionEntry" />
</XmlPeek>
<XmlPoke
   Condition="'@(VersionEntry)' != ''"
   XmlInputPath="$(XmlFilePath)"
   Query="/manifest/metadata/version"
   Value="4.3.2.1" />
<XmlPoke
   Condition="'@(VersionEntry)' == ''"
   XmlInputPath="$(XmlFilePath)"
   Query="/manifest/metadata"
   Value="&lt;Name&gt;whatever&lt;/Name&gt;&lt;Version&gt;4.3.2.1&lt;/Version&gt;" />

内容的提问来源于stack exchange,提问作者ackh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 09:50:26